ファイヤープロジェクト
散布グラフの作成(JFreechart 0.9.16)
2004-02-12T22:20+09:00   matsu
JFreeChartを使用して散布グラフを作成してみた.
前頁では,座標XYを線で結ぶグラフを作成したが,今回は座標XYをプロットするだけ(線で結ばない)のグラフを作成する.このグラフに対応したJFreeChartを便宜上XYScatterChartと呼ぶ.ではサンプル.
今回の主な登場クラスを整理しておく.
今回は,以下の三つのメソッドでJFreeChartがらみの処理を行なっている.
  • workXYScatterChart
  • getXYScatterChart
  • configXYScatterChart
workXYScatterChartは棒グラフの頁のサンプルとほとんど同じであるので,本頁では説明を省略する.サンプルを実行して作成されたPNG画像を以下に示す.
サンプルでは,XYScatterChartの作成をgetXYScatterChartメソッド内で行なっている.表示データはcreateXYDatasetメソッドで作成している(※).表示データはXYSeriesオブジェクトに格納して,これをXYSeriesCollectionに集める.そこでまずXYSeriesCollectionオブジェクトを作成する.
XYSeriesCollection xySeriesCollection = new XYSeriesCollection();
そしてXYSeriesオブジェクトを作成してデータを突っ込む.
XYSeries xySeries;
....
xySeries.add(value, 10.0 * value * value + eps * (series + 1.0));
第一引数はX値,第二引数はそのX値に対応するY値である.そしてXYSeriesオブジェクトをXYSeriesCollectionオブジェクトに格納する.
xySeriesCollection.addSeries(xySeries);
XYLineChartで自作したXYDatasetの実装クラスを参照すれば,XYSeriesCollectionクラス内部で何が起きているかは想像できるだろう.作成したXYDataset(の実装クラスXYSeriesCollection)オブジェクトを使用してChartFactoryでXYLineChartを作成する.
// XYDatasetをデータにしてJFreeChartを作成
JFreeChart xyScatterChart = ChartFactory.createScatterPlot ("SampleXYScatterChart",
						            "domain",
						            "range",
						            xyData, PlotOrientation.VERTICAL,
						            true, true, true);
引数はcreateXYLineChartと同様である.
※ もちろんXYLineChartのときのように,データ格納クラスを自作することもできる.
サンプルではconfigXYScatterChartメソッドで,プロットと棒グラフの軸に関する設定を行なっている.プロットはXYPlotオブジェクトである.以下はChartFrameを表示して,グラフエリア内の適当な場所でマウスをクリックしたときに,最寄りのプロットに補助線が引かれるように指定する.この補助線の描画指定は,縦横別途に指定可能である.
XYPlot xyPlot = xyScatterChart.getXYPlot();
/* カーソル位置で横方向の補助線をいれる */
xyPlot.setDomainCrosshairVisible(true);
/* カーソル位置で縦方向の補助線をいれる */
xyPlot.setRangeCrosshairVisible(true);
補助線が引かれたときの画像を以下に示す(※).
軸はXYLineChartのXYPlotオブジェクトから取り出す.XYLineChartでは,縦軸,横軸ともに縦軸はValueAxisクラスのサブクラスNumberAxisとなっている.縦軸の取得メソッドはgetDomainAxis,横軸を取得するメソッドはgetRangeAxisである(返り値の型はValueAxisなので,キャストする必要がある).
XYPlot xyPlot = xyScatterChart.getXYPlot();
.....
/* 横軸の設定 */
NumberAxis xAxis = (NumberAxis)xyPlot.getDomainAxis();
....
/* 縦軸の設定 */
NumberAxis yAxis = (NumberAxis)xyPlot.getRangeAxis();
今回は軸のレンジを自動で変更するように設定した.
xAxis.setAutoRange(true);
yAxis.setAutoRange(true);
....今回は別にわざわざNumberAxisにキャストする必要はなかったな.
※ ChartFrameを表示すると,右クリックで画像の保存や各種色の設定などが行なえる.
matsu(C)
Since 2002
Mail to matsu