JFreeChart/バブルチャート/BubbleChart-DefaultXYZDatasetの作成


目次 ⇒ [JFreeChartサンプル](https://qiita.com/artery/items/3e9c63e5c14a9e965c97)

```java
package jp.avaj.lib.chart;

import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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

import jp.avaj.lib.algo.ArMap;

/**
■ JFreeChart/バブルチャート/BubbleChart-DefaultXYZDatasetの作成
・X,Yの位置と円の大きさがあるので、DefaultXYZDatasetを使用する.z値がバブルの大きさとなる.
・DefaultXYZDatasetはMap<T0,List<T1>>やArListOnMap<T0,T1>から作成することができる.
・この例ではMap<T0,List<T1>>から作成する.

 */
public class Chart10_02 {
  // 目次-バブルチャート(BubbleChart)
  A_Chart10 a_Chart10;
  // 目次-Artery-JFreeChart用のライブラリ
  A_Chart00 a_LibChartSampeContents;

  public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
    // 表示データの作成
    Map<String,List<Chart10_02_Data>> listOnMap = createData();
    // DefaultXYZDatasetを生成する
    DefaultXYZDataset dataSet;
    {
      // カテゴリキーを変換する(bをBに)⇒不要ならばnullにする
      Map<String,String> names = ArMap.construct("b=B");
      // DefaultXYZDataset,フィールド名を指定する
      dataSet = ArcDefaultXYZDataset.create(listOnMap,names,"x","y","z");
    }
    // レンダラの指定⇒バブルチャート用のレンダラがある、引数は下記のものがあるがSCALE_ON_RANGE_AXISを指定すること
    //  (one of: SCALE_ON_BOTH_AXES, SCALE_ON_DOMAIN_AXIS, SCALE_ON_RANGE_AXIS).
    XYBubbleRenderer renderer = new XYBubbleRenderer(XYBubbleRenderer.SCALE_ON_RANGE_AXIS);
    // X軸,はみ出したりしないためにマージンを設定する、注、Rangeでもよい
    // ⇒ LowerMarginは効かないみたい
    NumberAxis xAxis = new NumberAxis();
    xAxis.setLowerMargin(0.1D);
    xAxis.setUpperMargin(0.1D);
    // Y軸,はみ出したりしないためにマージンを設定する、注、Rangeでもよい
    // ⇒ LowerMarginは効かないみたい
    NumberAxis yAxis = new NumberAxis();
    yAxis.setLowerMargin(0.1D);
    yAxis.setUpperMargin(0.1D);
    // PlotはXYPlotを使う
    XYPlot xyPlot = new XYPlot((XYDataset)dataSet,(ValueAxis)xAxis,(ValueAxis)yAxis,renderer);
    JFreeChart jfreeChart = new JFreeChart("BubbleChart",(Plot)xyPlot);
    //
    ChartFrame cFrame = new ChartFrame("BubbleChart",(JFreeChart)jfreeChart);
    cFrame.pack();
    cFrame.setVisible(true);
  }
  /** テストデータを作成する */
  private static Map<String,List<Chart10_02_Data>> createData() {
    Map<String,List<Chart10_02_Data>> listOnMap = new HashMap<String,List<Chart10_02_Data>>();
    List<Chart10_02_Data> list;
    {
      list = new ArrayList<Chart10_02_Data>();
      list.add(new Chart10_02_Data(2.1D,14.1D,2.4D));
      list.add(new Chart10_02_Data(2.3D,11.1D,2.7D));
      list.add(new Chart10_02_Data(2.3D,10.0D,2.7D));
      list.add(new Chart10_02_Data(2.2D,8.0D,2.2D));
      list.add(new Chart10_02_Data(2.2D,8.1D,2.2D));
      list.add(new Chart10_02_Data(1.8D,8.4D,2.2D));
      list.add(new Chart10_02_Data(1.8D,5.4D,2.1D));
      list.add(new Chart10_02_Data(1.9D,4.1D,2.2D));
      list.add(new Chart10_02_Data(2.3D,4.1D,1.6D));
      list.add(new Chart10_02_Data(3.8D,25.0D,4.0D));
      listOnMap.put("A",list);
    }
    {
      list = new ArrayList<Chart10_02_Data>();
      list.add(new Chart10_02_Data(3.1D,20.1D,2.4D));
      list.add(new Chart10_02_Data(0.3D,11.1D,2.7D));
      list.add(new Chart10_02_Data(1.7D,10.0D,2.7D));
      list.add(new Chart10_02_Data(0.2D,8.0D,2.2D));
      list.add(new Chart10_02_Data(1.2D,8.1D,2.2D));
      list.add(new Chart10_02_Data(0.8D,8.4D,2.2D));
      list.add(new Chart10_02_Data(0.8D,5.4D,2.1D));
      list.add(new Chart10_02_Data(0.9D,4.1D,2.2D));
      list.add(new Chart10_02_Data(0.3D,4.1D,1.6D));
      list.add(new Chart10_02_Data(2.8D,20.0D,4.0D));
      listOnMap.put("b",list);
    }
    return listOnMap;
  }
  /** データ格納用のクラス. */
  public static class Chart10_02_Data {
    public Chart10_02_Data(double x,double y,double z) {
      this.x = x;
      this.y = y;
      this.z = z;
    }
    private double x;
    private double y;
    private double z;
    public double getX() {
      return x;
    }
    public void setX(double x) {
      this.x = x;
    }
    public double getY() {
      return y;
    }
    public void setY(double y) {
      this.y = y;
    }
    public double getZ() {
      return z;
    }
    public void setZ(double z) {
      this.z = z;
    }
  }
}

```

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278568/0b216cc4-3a5d-6c8c-c329-bfad4543abbf.png)