0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JFreeChart-二次元分布チャート/XYChart/DefaultXYDatasetの作成/Collectionから作成する

Last updated at Posted at 2019-07-05

目次 ⇒ JFreeChartサンプル

package jp.avaj.lib.chart;

import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

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.DefaultXYItemRenderer;
import org.jfree.data.xy.DefaultXYDataset;
import org.jfree.data.xy.XYDataset;

/**
■ JFreeChart-二次元分布チャート/XYChart/DefaultXYDatasetの作成/Collectionから作成する
・PlotはXYPlot、DatasetはDefaultXYDatasetを使用する.
・DefaultXYDatasetは以下のメソッドを持っている
  addSeries(java.lang.Comparable seriesKey, double[][] data)
    ・dataはdouble[2][N]
    ・[0][N]:xのデータ
    ・[1][N]:yのデータ

・上記のdouble[][]は、ArcDefaultXYDatasetを使用して以下のように作成できる
  1.CollectionからPlotData(double[][])を作成する
    xとyの値は指定されたフィールドから取得する
  2.ListからPlotData(double[][])を作成する
    xはListのインデックス、yは指定されたフィールドから取得する
  3.ListからPlotData(double[][])を作成する
    yはListのインデックス、xは指定されたフィールドから取得する

・本サンプルでは1.の方法で作成する

・注、ArcDefaultXYDatasetはMap<T0,List<T1>>やArListOnMap<T0,T1>からDefaultXYDatasetを直接作成することもできる⇒別サンプル
 */
public class Chart03_01 {
  // 目次-二次元分布チャート-XYDataset
  A_Chart03 a_chart03;
  // 目次-Artery-JFreeChart用のライブラリ
  A_Chart00 a_LibChartSampeContents;

  public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
    // グラフ名
    String[] names = new String[]{"A","B","C"};
    // DefaultXYDatasetを作成する
    DefaultXYDataset dataSet = new DefaultXYDataset();
    for (int i=0; i<names.length; i++){
      // 元のリスト
      List<XYPlotSample00Data> list = createTestData(i);
      // フィールド名(x,y)を指定してdouble[][]に変換する⇒dataSetに追加する
      double[][] data = ArcDefaultXYDataset.create(list,"x","y");
      dataSet.addSeries(names[i],data);
    }

    // 軸を指定する⇒上下限は自動的に判定⇒明示的に設定もできる
    // 対数軸なども指定できる
    NumberAxis yAxis = new NumberAxis();
    NumberAxis xAxis = new NumberAxis();

    // レンダラーを指定する⇒色や形を自動的に設定する
    // グラフ(A,B,C)ごとにレンダラーを設定することもできる
    DefaultXYItemRenderer renderer = new DefaultXYItemRenderer();
    // (通常は)順番がないデータなので、線は引かない.
    renderer.setBaseLinesVisible(false);

    // Plotを作成する⇒XYPlotを使用する
    XYPlot xyPlot = new XYPlot((XYDataset)dataSet,(ValueAxis)xAxis,(ValueAxis)yAxis,renderer);
    // チャートを作成する
    JFreeChart jfreeChart = new JFreeChart("XYチャート",(Plot)xyPlot);
    // チャートを表示する
    ChartFrame cFrame = new ChartFrame("XYチャート",(JFreeChart)jfreeChart);
    cFrame.pack();
    cFrame.setVisible(true);
  }
  /** テストデータを生成する */
  private static List<XYPlotSample00Data> createTestData(int cnt) {
    Random ran = new Random();
    List<XYPlotSample00Data> list = new ArrayList<XYPlotSample00Data>();
    for (int i=0; i<20; i++) {
      list.add(new XYPlotSample00Data(cnt*2+ran.nextInt(20),cnt*4+ran.nextInt(10)));
    }
    return list;
  }
  /** テストデータを入れるクラス */
  public static class XYPlotSample00Data {
    public XYPlotSample00Data(int x,int y) {
      this.x = x;
      this.y = y;
    }
    private int x;
    private int y;
    public int getX() {
      return x;
    }
    public void setX(int x) {
      this.x = x;
    }
    public int getY() {
      return y;
    }
    public void setY(int y) {
      this.y = y;
    }
  }
}

無題.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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?