android - 条形图 X 值与 Y 值不对应

标签 android charts bar-chart mpandroidchart axis-labels

我有以下 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();
    }

}

当前图表如下所示:

current chart

这不是我期望的那样。

我正在尝试让我的图表看起来像这样:

expected output

基本上,我的目标是使 X 值与 Y 条对齐。 当然,如果有很多 X 值,这是不可能的,但由于只有 4 个柱,我希望所有 4 个 X 值都与 Y 柱对齐。

我试过的几件事:

  • xAxis.setGranularity(1f);
  • 设置最大标签数

有解决办法吗?

最佳答案

使用数字 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);

关于android - 条形图 X 值与 Y 值不对应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71055715/

相关文章:

javascript - D3 : Repositioning Pie Chart Labels on Update

javascript - 将 Chart.js 比例限制为整数

javascript - Chart.js 水平条宽度

r - R中的 Tornado 图

java - 如何在面板上通过 float 组和日期数组制作图表?

android - 在 Android 中解码 JSON base64 数据(来自 PHP 的 base64_encode)?

android - 如何删除 MaterialCardView 边框

Android:有什么方法可以通过蓝牙自动配对另一台设备而不提示输入密码?

android - 在 Android TV 模拟器上运行时缺少 MainActivity 错误

用于高级图表的 JavaScript 图表库