4

我有一个时间序列的数据,我想在刻度而不是时间刻度上绘制。

例如,如果该系列包含有时收到的点:10、15、30、100。而不是将这些点绘制在常规时间序列轴上,其中 30 和 100 点之间的距离为 70,我想要每个点之间的距离这些点为1 个单位。本质上,我想在基础数据集中的点索引处绘制点。

这可以在 JFreechart 中轻松完成吗?

我曾尝试实施自己的时间线,但它变得一团糟。我还希望标签反映时间而不是刻度数。

4

2 回答 2

3

我不知道如何使用具有时间坐标的数据元素创建图表,然后在绘制它们时忽略时间,但是当您创建 TimePeriodValues 时,您可以对数据点表示的 TimePeriod 撒谎为了让 JFreechart 相信它们是有规律的间隔的。当然,这意味着您必须手动预处理数据以对其进行排序,以便按顺序对事件进行编号(除非您已经拥有与该系列相关的事件编号?)

我不知道在轴上显示 x 坐标以外的其他内容的方法,但您可以在每个数据点旁边显示一个标签。(演示集合中的 Annotation 演示说明了如何。)

于 2009-07-23T17:14:28.990 回答
1

我通过使用 NumericAxis 而不是 DateAxis 来处理同样的事情,然后覆盖 refreshTicksHorizo​​ntal 方法来构建 NumericTicks 列表,但标签格式为日期。这有点麻烦,但为我完成了工作。

    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;
        }
    };
于 2010-03-02T20:13:56.157 回答