LoginSignup
0
0

More than 3 years have passed since last update.

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

Posted at

目次 ⇒ JFreeChartサンプル

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;
  }
}

無題.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0