3

我正在使用 jfreechart 来显示折线图。现在,在 X 轴上,它显示图表上每个 (x,y) 对的值。因此,X 轴有大量的值重叠。我想显示几个值,例如之后每 5 个单位或类似的东西。这怎么可能使用 Jfreechart。

4

1 回答 1

3

NumberAxis绘制图表的绘图之前,它的刻度线会刷新。结果是一个List包含NumberTick轴的每个刻度线的对象。

通过覆盖该函数NumberAxis.refreshTicks,您可以控制标记的显示方式和显示方式。

例如,在以下代码中,我获取所有刻度线并遍历它们以查找TickType.MAJOR. 如果主刻度线的值不能被 5 整除,则它会被次刻度线替换。

因此,只有可被 5 整除的值才会与其文本标签一起显示。

XYPlot plot = (XYPlot) chart.getPlot();

NumberAxis myAxis = new NumberAxis(plot.getDomainAxis().getLabel()) {
  @Override
  public List refreshTicks(Graphics2D g2, AxisState state,
                           Rectangle2D dataArea, RectangleEdge edge) {

    List allTicks = super.refreshTicks(g2, state, dataArea, edge);
    List myTicks = new ArrayList();

    for (Object tick : allTicks) {
      NumberTick numberTick = (NumberTick) tick;

      if (TickType.MAJOR.equals(numberTick.getTickType()) &&
                    (numberTick.getValue() % 5 != 0)) {
        myTicks.add(new NumberTick(TickType.MINOR, numberTick.getValue(), "",
                    numberTick.getTextAnchor(), numberTick.getRotationAnchor(),
                    numberTick.getAngle()));
        continue;
      }
      myTicks.add(tick);
    }
    return myTicks;
  }
};

plot.setDomainAxis(myAxis);
于 2012-06-28T14:13:34.067 回答