我有一个时间序列图表,显示每个日期的一些值,并且有两个序列显示为两条不同的线。问题是有时一个系列不包含某些特定日期的值。在这种情况下,我假设该行将从本系列的上一点延续到下一点。不幸的是,它在图表上无法正常工作,看起来根本没有正确绘制某些内容。
如果每个系列每个日期都包含适当的值,那就没问题了。
我的代码在这里:
for (String source : graphData.keySet()) {
SortedMap<LocalDate, BigDecimal> data = graphData.get(source);
LocalDate prevDate = null;
for (LocalDate date: data.keySet()) {
if (prevDate == null) {
prevDate = date;
continue;
}
dataset.add(new SimpleTimePeriod(prevDate.toDateMidnight().toDate(), date.toDateMidnight().toDate()), data.get(prevDate), source, true);
prevDate = date;
}
dataset.add(new SimpleTimePeriod(prevDate.toDateMidnight().toDate(), futureDate), data.get(prevDate), source, true);
}
Map<String, SortedMap<LocalDate, BigDecimal>> graphData
包含所有系列的数据,其中地图的关键是系列名称。正如我所说 - 有时系列 A 包含日期 1、2 和 3 的值,而系列 B 仅包含日期 1 和 2 的值。在这种情况下,A 和 B 的行看起来不正确......
有没有简单的方法可以解决这个问题?显而易见且难以实现的方法是计算B级数的缺失值(使用线性插值?)并将其放入数据集,但这真的很难做到。也许我错过了什么?
中点公式是替换单个缺失纵坐标的简单方法。
找出解决方法 -对于每个系列,创建它自己的数据集和渲染器。然后,在创建图表时,使用任何一个数据集,然后添加所有这些数据集和渲染器。
xyPlot.addDataset(0, firstDataset);
xyPlot.addDataset(1, secondDataset);
或者,如果可以有很多系列,那么最好在循环中这样做