代码之家  ›  专栏  ›  技术社区  ›  pjp

按刻度绘制时间序列的JFreechart

  •  4
  • pjp  · 技术社区  · 16 年前

    我有一个时间序列的数据,我想在上面绘制 滴答标度 而不是时间尺度。

    例如,如果序列包含在以下时间接收的点:10、15、30、100。我希望每个点之间的距离为 1单元 . 实际上,我想在基础数据集中的点索引处绘制点。

    在JFreechart中可以很容易地做到这一点吗?

    我已经尝试过执行我自己的时间表,但它变得越来越混乱。我也希望标签能反映时间,而不是勾号。

    2 回复  |  直到 15 年前
        1
  •  3
  •   PanCrit    16 年前

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

    我不知道如何在轴上显示除X坐标以外的其他内容,但您可以在每个数据点旁边显示标签。(演示集合中的注释演示显示了如何进行。)

        2
  •  1
  •   Tony Eichelberger    15 年前

    我用数字轴而不是日期轴来处理这个问题,然后重写refreshTickShorizontal方法来构建一个数字列表,但标签格式为日期。这是一个有点黑客,但得到了我的工作。

        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;
            }
        };
    
    推荐文章