目次 ⇒ 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;
}
}
}