条形图 X 值与 Y 值不对应
BarChart X-Value does not correspond with Y-Value
我有以下 BarEntry
列表:
for (Map.Entry<Date, Float> keyVal : allIncTypesWithAmount.entrySet()) {
long timeToDays = TimeUnit.MILLISECONDS.toDays(keyVal.getKey().getTime());
float perDay = timeToDays/30;
values.add(new BarEntry(perDay,keyVal.getValue()));
}
结果如下:
Tue Feb 01 01:00:00 GMT+01:00 2005 value 47.0
Mon Nov 01 01:00:00 GMT+01:00 2021 value 12.0
Mon Apr 01 02:00:00 GMT+02:00 2013 value 76.0
Tue Feb 01 01:00:00 GMT+01:00 2022 value 50.0
我的XAxis ValueFormatter
:
public class BarChartXAxisValueFormatter extends ValueFormatter
{
SimpleDateFormat sdf = new SimpleDateFormat("MM/yyyy", Locale.GERMANY);
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
@Override
public String getFormattedValue(float value) {
float timeToDays = value * 30;
long emissionsMilliSince1970Time = TimeUnit.DAYS.toMillis((long) timeToDays) ;
return sdf.format(getBeginOfMonth(new Date(emissionsMilliSince1970Time)));
}
public static Date getBeginOfMonth(Date d ) {
calendar.setTime(d);
calendar.set(Calendar.DAY_OF_MONTH, 1);
return calendar.getTime();
}
}
当前图表如下所示:
这不是我所期望的。
我正在尝试让我的图表看起来像这样:
基本上,我的目标是将 X 值与 Y 条对齐。
当然,如果有很多 X 值是不可能的,但是由于只有 4 个柱,我希望所有 4 个 X 值都与 Y 柱对齐。
我尝试了一些东西:
- xAxis.setGranularity(1f);
- 设置 maxLabelCount
有解决办法吗?
使用数字 1、2、3、4、5 等作为 x 值而不是日期。
每个数字应该代表一个日期:
0 value 47.0
1 value 12.0
2 value 76.0
3 value 50.0
定义 strings
,将显示 x 值:
ArrayList<String> xVals = new ArrayList<>();
xVals.add("04/2020");
xVals.add("06/2020");
xVals.add("11/2020");
xVals.add("01/2021");
将列表传递给 ValueFormatter
:
new ValueFormatter(xVals));
最后但同样重要的是,设置粒度:
xAxis.setGranularity(1f);
我有以下 BarEntry
列表:
for (Map.Entry<Date, Float> keyVal : allIncTypesWithAmount.entrySet()) {
long timeToDays = TimeUnit.MILLISECONDS.toDays(keyVal.getKey().getTime());
float perDay = timeToDays/30;
values.add(new BarEntry(perDay,keyVal.getValue()));
}
结果如下:
Tue Feb 01 01:00:00 GMT+01:00 2005 value 47.0
Mon Nov 01 01:00:00 GMT+01:00 2021 value 12.0
Mon Apr 01 02:00:00 GMT+02:00 2013 value 76.0
Tue Feb 01 01:00:00 GMT+01:00 2022 value 50.0
我的XAxis ValueFormatter
:
public class BarChartXAxisValueFormatter extends ValueFormatter
{
SimpleDateFormat sdf = new SimpleDateFormat("MM/yyyy", Locale.GERMANY);
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
@Override
public String getFormattedValue(float value) {
float timeToDays = value * 30;
long emissionsMilliSince1970Time = TimeUnit.DAYS.toMillis((long) timeToDays) ;
return sdf.format(getBeginOfMonth(new Date(emissionsMilliSince1970Time)));
}
public static Date getBeginOfMonth(Date d ) {
calendar.setTime(d);
calendar.set(Calendar.DAY_OF_MONTH, 1);
return calendar.getTime();
}
}
当前图表如下所示:
这不是我所期望的。
我正在尝试让我的图表看起来像这样:
基本上,我的目标是将 X 值与 Y 条对齐。 当然,如果有很多 X 值是不可能的,但是由于只有 4 个柱,我希望所有 4 个 X 值都与 Y 柱对齐。
我尝试了一些东西:
- xAxis.setGranularity(1f);
- 设置 maxLabelCount
有解决办法吗?
使用数字 1、2、3、4、5 等作为 x 值而不是日期。 每个数字应该代表一个日期:
0 value 47.0
1 value 12.0
2 value 76.0
3 value 50.0
定义 strings
,将显示 x 值:
ArrayList<String> xVals = new ArrayList<>();
xVals.add("04/2020");
xVals.add("06/2020");
xVals.add("11/2020");
xVals.add("01/2021");
将列表传递给 ValueFormatter
:
new ValueFormatter(xVals));
最后但同样重要的是,设置粒度:
xAxis.setGranularity(1f);