带有XYMultipleSeriesRenderer的TimeChart包含缺少值的行

时间:2014-08-27 01:16:40

标签: android achartengine

我继承了一些使用TimeChart和XYMultipleSeriesRenderer创建多系列LineChart的代码。示例如下所示。

enter image description here

上图有两个主要问题:
1)蓝色系列没有显示4个数据点中任何一个的标签
2)一些数据点(即2441.474和2388.316)彼此距离太近。

至少,我想找到#1的解决方案。以下是我用来生成视图的代码段。

创建XYMultipleSeriesDataset:

private XYMultipleSeriesDataset createLineDataset() {
    List<String> titles = mData.getColumnHeadings();
    List<List<Double>> values = new ArrayList<List<Double>>();
    List<Date> actualDays = new ArrayList<Date>();

    // Add the dates that we have data for
    for (String heading : mData.getRowHeadings()) {
        long toAdd = DateUtil.getLongFromDateStringFromMachineMeasurement(heading);
        actualDays.add( new Date(toAdd) );
    }
    for (JdTableColumn column : mData.getColumns()) {
        List<Double> columnBodyAsDoubles = column.getColumnBodyAsDoubles();
        Log.d(TAG, "Column doubles: " + columnBodyAsDoubles.toString());
        values.add(columnBodyAsDoubles);
    }

    return buildDataset(titles, values, actualDays);
}

  private XYMultipleSeriesDataset buildDataset(final List<String> titles, final List<List<Double>> values, final List<Date> dates) {
    XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
    int length = titles.size();
    for (int i = 0; i < length; i++) {
        TimeSeries series = new TimeSeries(titles.get(i));
        List<Double> valueList = values.get(i);
        int seriesLength = valueList.size();

        for (int k = 0; k < seriesLength; k++) {
            series.add(dates.get(k), valueList.get(k));
        }
        dataset.addSeries(series);
    }
    return dataset;
}

创建时间表:

GraphRange range = getStandardGraphRange();
XYMultipleSeriesRenderer renderer = buildBarRenderer(mData.getColumnHeadings().size(), PointStyle.POINT, true, context, range.getMin(), range.getMax());
TimeChart timeChart = new TimeChart(createLineDataset(), renderer);
    timeChart.setDateFormat(TIME_CHART_DATE_FORMAT);
    GraphicalView chart = new GraphicalView(context, timeChart);

唯一与我看到的问题类似的Stackoverflow问题是:All chart values do not show in line graph in achartengine。但是,在该帖子中,他们使用的是XYSeriesRenderer,而使用(XYMultipleSeriesRenderer)的渲染器没有建议的方法setDisplayChartValuesDistance()。如果有人对如何解决问题有任何建议,我将非常感谢您的反馈。

更新 根据接受的答案,我必须在每个XYSeriesRenderer上使用setDisplayChartDistance()方法,该方法被添加到XYMultipleSeriesRenderer渲染器中:

for (XYSeriesRenderer r : createBarSeriesRenderers(seriesLength, pointStyle, displayChartValues, context)) {
        r.setDisplayChartValuesDistance(8);
        renderer.addSeriesRenderer(r);
    }

1 个答案:

答案 0 :(得分:0)

您可以控制两个连续标签之间的最小距离(以像素为单位)。根据此值,图表会知道是否以及何时需要显示图表值标签。

mRenderer.setDisplayChartValuesDistance(distanceInPixels);