目次 ⇒ JFreeChartサンプル
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;
}
}
}