JFreechart在刻度尺上呈现时间序列

4
我有一组时间序列数据,我想将其绘制在刻度尺度上,而不是时间尺度上。
例如,如果该系列包含在10、15、30、100时刻接收到的点。我不想将这些点绘制在常规时间序列轴上,其中30和100点之间的距离为70,而是希望每个点之间的距离为1个单位。基本上,我想在基础数据集中的点索引处绘制这些点。
在JFreechart中能否轻松实现此功能?
我已经尝试实现自己的时间轴,但变得混乱。我还希望标签反映时间而不是刻度编号。
2个回答

3
我不知道如何创建包含时间坐标的数据元素的图表,并在绘图时忽略时间,但是在创建TimePeriodValues时,你可以虚构数据点表示的TimePeriod,以使JFreechart相信它们是定期间隔的。当然,这意味着你将需要手动预处理数据以排序,以便为事件编号(除非您已经将事件编号与系列相关联)。
我不知道如何在轴上显示除x坐标之外的内容,但是你可以在每个数据点旁边显示标签。(演示集合中的Annotation demo展示了如何实现)。

感谢PanCrit - 在尝试了时间轴和类别绘图之后,我回归到了使用像你建议的假时间的时间序列图。我会看一下注释演示。 - pjp

1

我曾经用NumericAxis代替DateAxis,并重写refreshTicksHorizontal方法来构建一个NumericTicks列表,但标签格式化为日期,以处理同样的问题。这有点像是一种hack,但对我来说完成了工作。

    NumberAxis domainAxis = new NumberAxis("Date") {
        @Override
        protected List refreshTicksHorizontal(Graphics2D g2, Rectangle2D dataArea, RectangleEdge edge) {
            List ticks = new ArrayList();
            //you'll need to have corresponding date objects around
            //or know how to match them up on the graph
            for (int i = 0; i < dates.size(); i++) {
                String label = dateFormat.format(dates.get(i));
                NumberTick tick = new NumberTick(i, label, TextAnchor.TOP_CENTER, TextAnchor.CENTER, 0.0);
                ticks.add(tick);                    
            }
            return ticks;
        }
    };

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接