目次 ⇒ 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 java.util.Random;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.Plot;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeriesCollection;
import jp.avaj.lib.algo.ArMap;
/**
■ JFreeChart-二次元分布チャート-XYSeriesCollectionをMap<T0,List<T1>>から作成する.X,Y値はT1のフィールドから取得
・本サンプルではMap<T0,List<T1>>から作成したがArListOnMap<T0,T1>から作成することも可能.
・またx値,y値はT1のフィールドから取得したが、どちらかをListのインデックスにすることも可能
*/
public class Chart15_05 {
// 目次-二次元分布チャート
A_Chart15 a_Chart15;
// 目次-Artery-JFreeChart用のライブラリ
A_Chart00 a_LibChartSampeContents;
public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
// 表示するデータを取得する
Map<String,List<Chart15_05_Data>> listOnMap = createData();
// シリーズ名の変換を指定する⇒S2をx2に変換する
Map<String,String> names = ArMap.construct("S2=x2");
XYSeriesCollection dataSet = ArcXYSeriesCollection.create(listOnMap,names,"x","y");
// レンダラの指定
// 最初の引数はラインを引くかどうか⇒今回はラインは引かない
// 次の引数はデータの場所に形を表示するか否か⇒今回は形を表示する.
XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer(false,true);
// 軸はNumberAxis
NumberAxis xAxis = new NumberAxis();
NumberAxis yAxis = new NumberAxis();
// Plotを作成して画面を表示する
XYPlot xyPlot = new XYPlot((XYDataset)dataSet,xAxis,yAxis,(XYItemRenderer)renderer);
JFreeChart jfreeChart = new JFreeChart("XYPlot",(Plot)xyPlot);
//
ChartFrame cFrame = new ChartFrame("XYPlot",(JFreeChart)jfreeChart); // (1)
cFrame.pack();
cFrame.setVisible(true);
}
/** 表示データを作成する */
private static Map<String,List<Chart15_05_Data>> createData() {
Map<String,List<Chart15_05_Data>> listOnMap = new HashMap<String,List<Chart15_05_Data>>();
Random ran = new Random();
for (int series = 0; series<5; series++) {
List<Chart15_05_Data> list = new ArrayList<Chart15_05_Data>();
for (int item = 0; item<10; item++) {
double x = ran.nextDouble()*10;
double y = x+ran.nextDouble()*5;
list.add(new Chart15_05_Data(x,y));
}
listOnMap.put("S"+series,list);
}
return listOnMap;
}
/** x値,y値を格納するクラス. */
public static class Chart15_05_Data {
public Chart15_05_Data(double x,double y) {
this.x = x;
this.y = y;
}
private double x;
private double y;
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;
}
}
}