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 に答える