JFreeChart-XYPlaot-도표의 확대와 축소

카탈로그
package jp.avaj.lib.chart;

import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.Plot;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.data.Range;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

import jp.avaj.lib.algo.ArUtil;

/**
■ JFreeChart-XYPlot-チャートの拡大と縮小

・チャートの中で左上から右下にドラッグすれば、チャートがドラッグ範囲に応じて拡大される。
・右下から左上にドラッグすれば元の画面に戻る。注、複数回拡大しても一回で元に戻る。

・プログラムから拡大あるいは縮小するにはどうすればよいか?
・X軸やY軸の上下限値を設定しなおせばよい。
・元に戻すためには、最初の軸の上下限値を記憶しておく必要がある。

 */
public class Chart18_06 {
  // 目次-ガAxis,目盛、グリッド.
  A_Chart18 a_Chart18;
  // 目次-Artery-JFreeChart用のライブラリ
  A_Chart00 a_LibChartSampeContents;

  public static void main(String[] args) {
    // 表示データを生成
    XYDataset dataset = createDataset();
    // 軸を生成
    ValueAxis xAxis = new NumberAxis();
    ValueAxis yAxis = new NumberAxis();
    // レンダラ ⇒ これが全体のレンダラになる
    XYItemRenderer renderer = new StandardXYItemRenderer();
    // Plotを生成してチャートを表示する
    XYPlot xyPlot = new XYPlot(dataset,xAxis,yAxis,renderer);
    JFreeChart jfreeChart = new JFreeChart("チャートの拡大と縮小",(Plot)xyPlot);
    ChartFrame cFrame = new ChartFrame("チャートの拡大と縮小",(JFreeChart)jfreeChart);
    cFrame.pack();
    cFrame.setVisible(true);

    // 元の軸の大きさを保存しておく
    Range xRange = xAxis.getRange();
    Range yRange = yAxis.getRange();

    // 目で確認するために少し待つ
    ArUtil.sleep(2000);

    // 縮小する
    {
      xAxis.setRange(0.0D,30.0D);
      yAxis.setRange(0.0D,50.0D);
    }

    // 目で確認するために少し待つ
    ArUtil.sleep(12000);

    // 拡大する
    {
      xAxis.setRange(2.0D,7.0D);
      yAxis.setRange(5.0D,10.0D);
    }

    // 目で確認するために少し待つ
    ArUtil.sleep(2000);

    // 元の大きさに戻す
    {
      xAxis.setRange(xRange);
      yAxis.setRange(yRange);
    }
  }
  private static XYDataset createDataset() {
    XYSeriesCollection dataset = new XYSeriesCollection();
    // 一本目
    XYSeries xySeries = new XYSeries("data-0");
    for (int j=0; j<10; j++) {
        xySeries.add(j,j+Math.random()*4.0D);
    }
    dataset.addSeries(xySeries);
    // 二本目
    xySeries = new XYSeries("data-1");
    for (int j=0; j<10; j++) {
        xySeries.add(j,9-j+Math.random()*4.0D);
    }
    dataset.addSeries(xySeries);
    return dataset;
  }
}

JFreeChart 샘플

좋은 웹페이지 즐겨찾기