我继承了一些使用TimeChart和XYMultipleSeriesRenderer创建多系列LineChart的代码。示例如下所示。
上图有两个主要问题:
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);
}
答案 0 :(得分:0)
您可以控制两个连续标签之间的最小距离(以像素为单位)。根据此值,图表会知道是否以及何时需要显示图表值标签。
mRenderer.setDisplayChartValuesDistance(distanceInPixels);