【问题标题】:JFreechart Rendering a timeseries on a tick scaleJFreechart 在刻度上渲染时间序列
【发布时间】:2010-11-13 02:02:47
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: jfreechart time-series


    【解决方案1】:

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

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

    【讨论】:

    • 感谢 PanCrit - 在玩过 Timeline 和类别图之后,我恢复到您建议的假时间的时间序列图。我看一下注解演示。
    【解决方案2】:

    我通过使用 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;
            }
        };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-12
      • 2012-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多