ファイヤープロジェクト
棒グラフの作成(JFreechart 0.9.16)
2004-02-11T00:10+09:00   matsu
JFreeChartを使用して棒グラフを作成してみた.
早速棒グラフを表示するサンプル.
今回は新しくAxisクラスとそのサブクラスが登場している.棒グラフや折れ線グラフなどでは,縦軸と横軸がある.Axisクラスは名前のとおり,これら軸を表し軸に関する設定操作を行なうことができる(※).今回の主な登場クラスを整理しておく.
さて,今回は,以下の三つのメソッドでJFreeChartがらみの処理を行なっている.
  • workBarChart
  • getBarChart
  • configBarChart
詳細は次節以降に記述するとして,サンプルを実行して作成されたJPEG画像を以下に示す.
※ 本頁では基本的に縦棒グラフを前提として「縦軸」「横軸」について言及する.横棒グラフの場合は「縦軸」と「横軸」は反転するので注意すること.
まず,例によって棒グラフ用JFreeChartを便宜上BarChartと呼ぶことを断っておく.で,今回のサンプルでは,workBarChartメソッドにおいてBarChart作成メソッドでBarChartを作成,configBarChartメソッドによって設定,それを使用して以下を行なっている.
JPEG形式でファイルに出力
呼び出すメソッド名以外はPNG形式でのファイル出力と同様である.
// 作成したPieChartでJPEGファイルを作成.
File outFile = new File("./barchart.jpg");
try {
    ChartUtilities.saveChartAsJPEG(outFile, barChart, 500, 500);
} catch(IOException e) {
    e.printStackTrace();
}
ChartFrameを作成
今回はChartFrameを作成した.これはSWINGのJFrameのサブクラスである.そしてサイズ等を設定して出力している.
// 作成したBarChartでChartFrameを作成.
ChartFrame cFrame = new ChartFrame ("barChartFrame", barChart);
RefineryUtilities.centerFrameOnScreen(cFrame);
cFrame.setSize(500, 500);
cFrame.setVisible(true);
cFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
サンプルでは,BarChartの作成をgetBarChartメソッド内で行なっている.円グラフと同様,まずdouble型の二次元配列にデータを突っ込み,それをもとにCategoryDatasetを作成を作成する.
// 棒グラフのデータ
double[][] data = new double[][]
{{1.0, 2.0, 3.0, 4.0},
 {5.0, 6.0, 7.0, 8.0},
 {9.0, 10.0, 11.0, 12.0},
 {13.0, 14.0, 15.0, 16.0}};
// CategoryDatasetオブジェクトの作成
CategoryDataset cData = DatasetUtilities.createCategoryDataset("RowKey ", "ColKey ", data);
DatasetUtilities.createCategoryDatasetの引数については,円グラフの作成頁で記述した.ただし,グラフの種類が異なるので,当然ながら二次元配列の意味あいが多少異なる.先のサンプルの出力結果の説明をすると,double型二次元配列の各行が各色に対応する.したがって一行n列の配列であれば一色の棒グラフができる.そして,複数の棒の束が同二次元配列の各列に対応する.出力結果の"RowKey","ColKey"に注意するとよくわかるだろうか.さて,CategoryDatasetが出来れば,あとはChartFactoryで作成するだけである.
// CategoryDatasetをデータにしてJFreeChartを作成
JFreeChart barChart = ChartFactory.createBarChart ("SampleBarChart",
						   "categoryAxisLabel",
						   "valueAxisLabel",
						   cData, PlotOrientation.VERTICAL,
						   true, true, true);
第一引数はグラフのタイトル,第二引数は横軸の説明,第三引数は縦軸の説明,第四引数は表示データである.第五引数により,縦の棒グラフ(PlotOrientation.VERTICAL)か横の棒グラフ(PlotOrientation.HORIZONTAL)かを指定する.最後三つはcreatePieChartと同様.
サンプルではconfigBarChartメソッドで,棒グラフの軸に関する設定を行なっている.軸はJFreeChartオブジェクトのCategoryPlotオブジェクトから取り出す.BarChartでは,横軸はCategoryAxisクラス,縦軸はValueAxisクラスとなっている(※).
CategoryPlot cPlot = barChart.getCategoryPlot();
....
CategoryAxis domainAxis = cPlot.getDomainAxis();
....
ValueAxis valueAxis = cPlot.getRangeAxis();
横軸に関する設定では,以下の三つを行なっている.
CategoryMarginの設定
サンプルの出力では4色の棒の束が4つある.この4つの束の間をJFreeChartではCateggoryMarginと呼ぶ.で,横軸全体を1としたとき,どの程度(総和)をCategoryMarginに割り当てるかを以下で指定する.
domainAxis.setCategoryMargin(0.3);
設定するのはCategoryMarginに割く総和であることに注意.今回は4つの束があるので,全体を1として0.3/(4-1) = 0.1を各束の間に割くことになる.
LowerMarginの設定
縦棒グラフなら,一番左の棒と左の縦軸の間である(つまりLowerMarginは一つしかない).やはり全体を1として設定する.
domainAxis.setLowerMargin(0.1);
UpperMarginの設定
LowerMarginの反対側,縦棒グラフなら一番右の棒と,右の縦軸の間である(やはりUpperMarginも一つしかない).全体を1として設定する.
domainAxis.setUpperMargin(0.2);
次は縦軸である.縦軸はValueAxisオブジェクトである.これにはAutoRange機能がある.表示データの大きさに応じて軸のレンジが自動的に変化する機能である.今回はこれをoffとした.
valueAxis.setAutoRange(false);
onにするにはtrueを渡す.そしてAutoRangeを指定するかわりに縦軸のレンジを指定した.
valueAxis.setRange(1.0, 30.0);
データの大きさに係わらず軸のレンジを固定したい場合には以上のようにする.
※ 縦棒グラフの場合である.横棒グラフなら横軸はValueAxisクラス,縦軸はCategoryAxisクラスである.
matsu(C)
Since 2002
Mail to matsu