JFreechart:在特定单位后显示X轴

时间:2012-05-25 11:53:44

标签: jfreechart

我正在使用jfreechart来显示折线图。现在,在X轴上它显示了图表上每个(x,y)对的值。结果,X轴有大量的值重叠。我想显示一些值,例如每5个单位之后或类似的东西。如何使用Jfreechart。

1 个答案:

答案 0 :(得分: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);