(0)目次&概説
(1) 記事の目的
(1-1) 目的
(2) JFreeChartの概要
(2-1) JFreeChartとは?
(2-2) JFreeChartのアーキテクチャについて
(3) JFreeChartの導入手順
(3-1) ライブラリのダウンロード
(3-2) ライブラリの配置
(3-3) ビルドパスの設定
(4) JFreeChartサンプルプログラム
(4-1) 円グラフサンプル(PieChart)
(4-2) 折れ線グラフサンプル(LineChart)
(4-3) XY折れ線グラフサンプル(XYLineChart)
(1) 記事の目的
(1-1) 目的
今回はJavaで各種グラフ(折れ線グラフや円グラフ等)を「簡単に」描画する方法を紹介するという目的で「JFreeChart」を用いた方法を紹介します。
(2) JFreeChartの概要
(2-1) JFreeChartとは?
高品質なチャート画像の生成を行うためのライブラリ群で、グラフの元になるデータを与えるだけで各種グラフの描画が可能です(円グラフ/折れ線グラブ/棒グラフ/レーダーチャートなど)。様々な出力形式が可能で、JavaのSwingやJavaFX(ともにJavaのGUIツールキット基盤技術)をはじめ、画像ファイル(PNGやJPEG)での出力も可能です。
【公式サイト】:http://www.jfree.org/jfreechart/
(図211)JFreeChartで作成したチャートの例
■備考
・チャートの描画にはJava 2DのAPIが利用されます
・Java FXもサポートされていますが、JDK 1.8.0以上の環境が必要
・依存ライブラリであるJCommon等についてはJFreeChartの配布資源に含まれています(※jcommon-1.0.23.jarなど)
・別途ソースコード本体が必要な場合は専用サイトからダウンロードします。
http://www.jfree.org/jcommon/
(2-2) JFreeChartのアーキテクチャについて
(2-2-1) クラス粒度のアーキテクチャについて
JFreeChartの処理の流れは大きく分けて3つのステップで構成されます。
①データセットの作成
(表の元となるデータの作成)
↓
②チャートの作成
(棒グラフや円グラフ等の生成)
↓
③出力処理
(Swingフレームへの描画やPNG画像での出力等)
そして各ステップ毎に専用のクラスを使い、それらを組み合わせていく事でチャートの描画を実現していきます。
(図212)JFreeChartのクラス粒度の構造
(表)各ノードの説明
処理 | 処理結果 (アウトプット) |
概要 |
Create Dataset (データセット生成) |
- | データセット(グラフに描画する値の集まり)を作成する工程です |
- | General Dataset | 円グラフ用(PieChart)です。 —————————— (例)DefaultPieDatasetクラス |
- | Category Dataset | 折れ線グラフ(LineChart)/棒グラフ用(BarChart)です。 —————————— (例)DefaultCategoryDatasetクラス |
- | Series Dataset | 同一カテゴリのデータを纏める単位です。例えば米国の折れ線データの点群を一つのカテゴリに入れて、日本の折れ線データの点群は別のカテゴリに入れます。 —————————— (例)XYSeriesクラス |
- | Series Collection Dataset | 異なるカテゴリの「Series Dataset」を一纏めにしたのが「Series Collection Dataset」です。主にXY折れ線グラフ用(XY LineChart)用です。 —————————— (例)XYSeriesCollectionDatasetクラス |
Create Chart (チャート生成) |
- | データセットを用いて実際にチャートを生成する処理です。 —————————— (例)ChartFactoryクラス-createLineChartメソッド (例)ChartFactoryクラス-createXYLineChartメソッド |
Frame / Image (出力処理) |
- | アウトプット(生成したチャート)はSwingのフレーム(Jframeクラス)か画像(PNG/JPEG)として出力されます。 —————————— (例)ChartFrameクラス (例)ChartUtilitiesクラス-writeChartAsPNGメソッド |
(3) JFreeChartの導入手順
(3-1) ライブラリのダウンロード
下記のダウンロードサイトより資源をダウロード&解凍します。
https://sourceforge.net/projects/jfreechart/files/
(図312)ダウンロードサイト
(図313)ダウンロード押下
(3-2) ライブラリの配置
①jcommon-X.X.X.jar
→(例)jfreechart-1.0.19\lib\jfreechart-1.0.19.jar
②jfreechart-X.X.X.jar
→(例)jfreechart-1.0.19\lib\jcommon-1.0.23.jar
(図314)必要なjar
(図315)TeraTermを使ってLinuxサーバに配備する例
※一度tempディレクトリに送ってからcpコマンドで正規の場所に配置しています。
(3-3) ビルドパスの設定
以下の手順で配置した2つのjarファイルに対してビルドパスの設定を行います。
①チャート描画を行うプロジェクトを右クリックして「BuildPath」→「Configure Build Path」と選択します。
(図316)
②プロパティ画面が開いたら「Libraries」タブを開いて「Add External Jars」を選択します。
(図317)
③先ほど追加したjarファイルを選択します。
(図318)
④追加された事が確認できたら「Apply and Close」を押下します。
(図319)
以上で事前の準備は完了です。
(4) サンプルプログラム
(4-1) 円グラフサンプル(PieChart)
円グラフのサンプルプログラムです。
package jfreechart; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartFrame; import org.jfree.chart.JFreeChart; import org.jfree.data.general.DefaultPieDataset; public class JFreeChartSampePieChart { public static void main(String args[]) { //(1)データセットの作成 DefaultPieDataset ds_pie = new DefaultPieDataset(); ds_pie.setValue("みかん",12); ds_pie.setValue("バナナ",18); ds_pie.setValue("りんご",20); ds_pie.setValue("ぶどう",27); ds_pie.setValue("オレンジ",23); //(2)チャートの作成 JFreeChart chart=ChartFactory.createPieChart3D("好きなフルーツは?", ds_pie,true,false,false); //(3)出力処理 ChartFrame frame1 = new ChartFrame("Rainbow Planet Sample Chart(^o^)", chart); frame1.setVisible(true); frame1.setSize(600,400); } }
(図411)実行結果
(4-2) 折れ線グラフサンプル(LineChart)
折れ線グラフのサンプルプログラムです。
package jfreechart; import java.awt.BasicStroke; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartFrame; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.category.DefaultCategoryDataset; public class JFreeChartSampeCategoryChart { public static void main(String args[]) { //(1)データセットの作成 DefaultCategoryDataset ds_cat = new DefaultCategoryDataset(); ds_cat.setValue(120,"チョコ","3月"); ds_cat.setValue(130,"チョコ","4月"); ds_cat.setValue(140,"チョコ","5月"); ds_cat.setValue(150,"クッキー","3月"); ds_cat.setValue(120,"クッキー","4月"); ds_cat.setValue(130,"クッキー","5月"); ds_cat.setValue(250,"グミ","3月"); ds_cat.setValue(190,"グミ","4月"); ds_cat.setValue(210,"グミ","5月"); //(2)チャートの作成 JFreeChart chart=ChartFactory.createLineChart("お菓子の売上数", "月", "売れた数", ds_cat, PlotOrientation.VERTICAL, true, false, false); chart.getCategoryPlot().getRenderer().setSeriesStroke(0, new BasicStroke(4)); chart.getCategoryPlot().getRenderer().setSeriesStroke(1, new BasicStroke(4)); chart.getCategoryPlot().getRenderer().setSeriesStroke(2, new BasicStroke(4)); //(3)出力処理 ChartFrame frame1 = new ChartFrame("Rainbow Planet Sample Chart(^o^)", chart); frame1.setVisible(true); frame1.setSize(800,400); } }
(図413)実行結果
(4-3) XY折れ線グラフサンプル(XYLineChart)
XY折れ線グラフのサンプルプログラムです。
package jfreechart; import java.awt.BasicStroke; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartFrame; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.general.DefaultPieDataset; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; public class JFreeChartSampeXYLineChart { public static void main(String args[]) { //(1)データセットの作成 XYSeries xy1 = new XYSeries("あああ商店"); xy1.add(1,150); xy1.add(2,160); xy1.add(3,180); XYSeries xy2 = new XYSeries("いいい書店"); xy2.add(1,200); xy2.add(2,180); xy2.add(3,220); XYSeriesCollection ds_xy = new XYSeriesCollection(); ds_xy.addSeries(xy1); ds_xy.addSeries(xy2); //(2)チャートの作成 JFreeChart chart=ChartFactory.createXYLineChart("商店街売上", "日", "来店数", ds_xy, PlotOrientation.VERTICAL, true, false, false); chart.getXYPlot().getRenderer().setSeriesStroke(0, new BasicStroke(4)); chart.getXYPlot().getRenderer().setSeriesStroke(1, new BasicStroke(4)); //(3)出力処理 ChartFrame frame1 = new ChartFrame("Rainbow Planet Sample Chart(^o^)", chart); frame1.setVisible(true); frame1.setSize(600,400); } }
(図414)