【问题标题】:How can I use custom data in LineChart MPAndroidChart?如何在 LineChart MPAndroidChart 中使用自定义数据?
【发布时间】:2017-05-08 20:23:02
【问题描述】:

如何使用MPAndroidChart 在 LineChart 的 x 轴上放置日期? 现在我将日期(以毫秒为单位)转换为字符串,但是当我尝试将其放入图表时,x 值不会显示。

        LineDataSet dataSet = new LineDataSet(entries, getString(R.string.NDVI_trend));
    LineData lineData = new LineData(dataSet);

    chart.setData(lineData);
    Description description = new Description();
    description.setText("");
    chart.setDescription(description);
    chart.getAxisRight().setEnabled(false);
    chart.getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM);
    chart.getXAxis().setDrawGridLines(false);
    chart.getLegend().setEnabled(false);

    String[] dateString = new String[entries.size() +1];
    for (int i = 0; i < entries.size(); i++){
        dateString[i] = getDate((long)entries.get(i).getX(),"dd MMM yyyy");
    }

    IAxisValueFormatter axisValueFormatter = new IndexAxisValueFormatter(dateString);
    chart.getXAxis().setValueFormatter(axisValueFormatter);
    chart.invalidate();

getData 方法:

public static String getDate(long milliSeconds, String dateFormat)
{
    SimpleDateFormat formatter = new SimpleDateFormat(dateFormat);

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(milliSeconds);
    return formatter.format(calendar.getTime());
}

【问题讨论】:

标签: java android android-studio mpandroidchart


【解决方案1】:

如果您知道如何将您的float x 值转换为StringDate 表示,您可以使用IAxisValueFormatter

mChart.getXAxis().setValueFormatter(new IAxisValueFormatter() {
        private SimpleDateFormat mFormat = new SimpleDateFormat("dd MMM HH:mm");

        @Override
        public String getFormattedValue(float value, AxisBase axis) {

            long millis = (long) value;
            return mFormat.format(new Date(millis));
        }
    });
chart.getXAxis().setValueFormatter(axisValueFormatter);
chart.setGranularity(1.0f);
chart.setGranularityEnabled(true);

【讨论】:

  • 我试过了,但是 x 值没有显示。转换正常String[] dateString = new String[entries.size()]; for (int i = 0; i &lt; entries.size(); i++){ dateString[i] = getDate((long)entries.get(i).getX(),"dd MMM yyyy"); } IAxisValueFormatter axisValueFormatter = new IndexAxisValueFormatter(dateString); chart.getXAxis().setValueFormatter(axisValueFormatter); chart.invalidate();
  • @Davide 可能会尝试用粒度注释掉这些行。否则,您可以编辑您的帖子以包含 minimal reproducible example,我明天再看看
  • @Davide 您使用什么值?我的意思是什么数据?
  • 以毫秒为单位的日期值是这样的:1465084800000, 1465344000000, 1466208000000
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-03
  • 2020-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多