JFreeChart:TimeSeries图表上的几个时间序列显示不正确

时间:2012-04-20 16:06:02

标签: java jfreechart

我有一个TimeSeries图表,每个日期显示一些值,有两个系列显示为两个不同的行。 问题是有时一个系列不包含某些特定日期的值。在这种情况下,我假设该系列将从前一个点继续到下一个点。 不幸的是,它在图表上无法正常工作,看起来根本没有正确绘制。

如果每个系列每个日期都包含适当的值,则可以。

我的代码在这里:

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系列的遗漏值(使用线性插值?)并将其放入数据集中,但这样做真的很难。也许我错过了什么?

2 个答案:

答案 0 :(得分:2)

midpoint formula是替换单个缺失纵坐标的简单方法。

答案 1 :(得分:1)

找到解决方法 - 对于每个系列,创建它自己的数据集和渲染器。 然后,在创建图表时使用任何一个数据集,然后添加所有这些数据集和渲染器。

xyPlot.addDataset(0, firstDataset);
xyPlot.addDataset(1, secondDataset);

或者如果有足够的系列,那么最好在循环中进行