4.初めてのグラフ作成

最もシンプルと思われるグラフをJFreeChartを使って作ってみます。グラフをSwingで作ったフレーム内に表示することもできる(はず)ですが、今回はJPEG形式の画像ファイルとして保存してみます。

シンプルなだけに逆に実際には使わないかも知れませんが、JFreeChartを設定方法、説明を理解するのに好都合です。



4.1 棒グラフの作成(その1)
  ここでは年度ごとの売上高を棒グラフで表示する簡単なグラフを作ってみます。

public class BarSample1 {
public static void main(String[] args) {

  ここまではどのプログラムでも同じです。

// データセットの作成
DefaultCategoryDataset dataset = new DefaultCategoryDataset();

  別のところで書こうと思いますが、JFreeChartでは、グラフに描画するデータをDatasetというクラスに入れて管理します。
  ちなみに、日本では一般的にグラフといいますが、英語だとチャートと呼ぶので、単にグラフを示すときは今後チャートと記します。(棒グラフ、円グラフなどグラフの種類のことをいう場合には、棒チャートとは普通言わないので棒グラフのままにしますが、コンピュータサイエンスでグラフといえば、ノードとノードを結ぶ線の集まりになってしまうので)

  さて本題ですが、例えば、売上高が次の表の数値であったとします。

年度 2001年 2002年 2003年 2004年 2005年
売上高(億円) 0.2 2.2 5.1 9.8 12.0

  データセットには次のようにセットします。

// 売上高を設定
dataset.addValue(0.2, "売上高", "2001年");
dataset.addValue(2.2, "売上高", "2002年");
dataset.addValue(5.1, "売上高", "2003年");
dataset.addValue(9.8, "売上高", "2004年");
dataset.addValue(12.0, "売上高", "2005年");

  dataset.addValue()の引数は、左から”棒グラフに表示する数値”、”値の種類”、”普通のXY座標であれば、X軸方向のメモリの単位”、の順に指定します。

  ”棒グラフに表示する数値”は、チャートに表示する棒グラフの長さを決める数値です。チャートの向きを回転させない限りXY座標では縦軸になります。
  ”値の種類”というとちょっとわかりにくいですね。今回は売上高という1種類の数値のみを棒グラフで表示しますが、売上高だけでなく利益も表示したり、販売管理費を表示するといったとき、売上高、利益、販売管理費といった”値の種類”を指定します。JFreeChart用語?では、rowKeyと呼んでいます。
  ”普通のXY座標であれば、X軸方向のメモリの単位”はチャートの向きを回転させない限りXY座標では横軸になり、JFreeChart用語?では、columnKeyと呼んでいます。私の感覚からするとrowとcolumnが逆に見えてしっくりこないのですが、たぶん私の感覚のほうがおかしいのでしょう。

   addValue(Number value, Comparable rowKey, Comparable columnKey);

  つまり、rowKeyに同じ値を設定しておけば、同じ種類の値とみなされます。

  続いて、チャートオブジェクトを作成します。JFreeChartでは、ChartFactoryクラスを使い、チャートオブジェクトのインスタンスを生成します。ChartFactoryでは、どのような種類のチャートを作成するかにより、呼び出すメソッドが変わります。
  下の例では、棒グラフを作成するので、createBarChart()を呼び出しています。

// 棒グラフのJFreeChartオブジェクトを生成
JFreeChart chart = ChartFactory.createBarChart(
"売上高",                // チャートのタイトル
"年度",                  // X 軸のタイトル
"億円",                  // Y 軸のタイトル
dataset,                 // 各系列のデータ
PlotOrientation.VERTICAL,// 縦置き(X 軸を横、Y 軸を縦に設定)
true,                   // 凡例を描画
false,                  // Tool Tips を表示しない
false                   // URLは生成しない
);

  各引数の意味は、上記コードのコメントのとおりです。

  ChartFactoryクラスには、3D棒グラフ-createBarChart3D()(YXZという意味でなく単に立体的なグラフという意味での3Dです)、折れ線グラフ-createLineChart()円グラフ-createPieChart()、さらにガントチャート-createGanttChart()などもあります。

  そして、チャートオブジェクトを画像ファイルに書き出します。ファイルへの保存は、JFreeChartに用意されているユーティリティクラスを使えば簡単で、次のようになります。

// 画像ファイルへ出力
File outputFile = new File("bar_sample1.jpg");
try {
ChartUtilities.saveChartAsJPEG(outputFile, chart, 400, 400);
} catch (IOException ex) {
System.out.println(ex.getMessage());
}

  400×400ピクセルのサイズを持ったJPEG形式の画像ファイルに保存します。
  最後のメソッドとクラスの定義を閉じます。

}
}

BarSample1を実行した結果はこのようになります。

以上です。チャートを作成するために必要なのはこれだけで、あとは凡例の表示制御や各種ラベルのフォント、棒グラフの棒の色など、必要に応じて細かい設定を行えば、希望どおりのチャートを作成できます。
参考までに BarSample1のソースファイルへのリンクを張っておきます。


4.2 棒グラフの作成(その2)
  4.1 棒グラフの作成(その1)では、1種類の値の棒グラフを作成しましたが、次は2種類の値を表示するチャートを作成します。
  4.1 棒グラフの作成(その1)が売上高でしたので、これに経常利益の表示を追加してみます。元の値は次の表のとおりです。

年度 2001年 2002年 2003年 2004年 2005年
売上高(億円) 0.2 2.2 5.1 9.8 12.0
経常利益(億円) 0.002 0.2 0.4 0.8 1.1

  4.1 棒グラフの作成(その1)で作成したソースファイルに対する変更箇所はデータセットに売上高の値を設定した後、次のように経常利益の値を設定するだけです。

// 経常利益を設定
dataset.addValue(0.002, "経常利益", "2001年");
dataset.addValue(0.2, "経常利益", "2002年");
dataset.addValue(0.4, "経常利益", "2003年");
dataset.addValue(0.8, "経常利益", "2004年");
dataset.addValue(1.1, "経常利益", "2005年");

  経常利益を追加したものをBarSample2クラスとして定義します。
BarSample2を実行した結果はこのようになります。

次は、別の種類のチャートを作成し、データセット以外に系列(Series)やプロット(Plot)など、JFreeChartの構成要素を説明するか、今回作った棒グラフを使って、タイトル、サブタイトル、値のレンジが異なる軸の表示など、JFreeChartで作成するチャートに共通して使える操作の例を示すか、いづれかにしようと思います。

最初の予定とズレてきてますが…


コメントをどうぞ。


《最終更新日》2006-11-08     《タグ・キーワード》 , ,