【发布时间】:2014-09-09 23:17:03
【问题描述】:
我继承了一些使用 TimeChart 和 XYMultipleSeriesRenderer 来创建多系列 LineChart 的代码。示例如下所示。
上图有两个主要问题:
1) 蓝色系列不显示任何 4 个数据点的标签
2) 部分数据点(即2441.474和2388.316)距离太近。
至少,我想为#1 找到解决方案。下面是我用来生成视图的代码 sn-p。
创建 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()。如果有人对如何解决此问题有任何建议,我将非常感谢您的反馈。
更新: 根据接受的答案,我必须在添加到 XYMultipleSeriesRenderer 渲染器的每个 XYSeriesRenderer 上使用 setDisplayChartDistance() 方法:
for (XYSeriesRenderer r : createBarSeriesRenderers(seriesLength, pointStyle, displayChartValues, context)) {
r.setDisplayChartValuesDistance(8);
renderer.addSeriesRenderer(r);
}
【问题讨论】:
标签: android achartengine