Javaでのプログラミング学習を始めたばかりの方は、グラフ描画の処理なんて難しそうで自分には出来ないだろうと思っている方も多いのではないでしょうか。
本記事では、Java初心者の方でも簡単にグラフ描画処理を実現出来る「JFreeChart」の使い方をご紹介していきます。
目次
JFreeChartについて
JFreeChartは、円グラフや棒グラフをはじめ、様々なグラフを描画する機能がまとまったJava用のライブラリです。
JFreeChartの機能
JFreeChartでは、グラフとして表示するデータをライブラリの機能に渡すことで、簡単にグラフ描画の処理を実施してくれる機能が提供されています。
グラフはJavaのSwingで画面上に表示する以外にも、JPEGやPNGといった画像形式で出力することも可能です。
JFreeChartのダウンロード
JFreeChartのGitHubページにアクセスすると、ソースコードが公開されているため、自由にダウンロードして利用することが可能です。
他にもSOURCEFORGEなどからzipファイルとしてダウンロードし、jarファイルのみを利用することも出来ます。
円グラフを描画するJavaサンプルプログラム
まずはグラフの中でも利用されることの多い「円グラフ」をJFreeChartで描画してみましょう。
サンプルコード
package chart; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartFrame; import org.jfree.chart.JFreeChart; import org.jfree.data.general.DefaultPieDataset; public class Main { public static void main(String args[]) { DefaultPieDataset dpd = new DefaultPieDataset(); dpd.setValue("関東", 45); dpd.setValue("関西", 23); dpd.setValue("東北", 12); dpd.setValue("中国・四国", 7); dpd.setValue("九州", 13); JFreeChart chart=ChartFactory.createPieChart3D("イベント参加者比率", dpd, true, false, false); ChartFrame ch = new ChartFrame("円グラフサンプル", chart); ch.setVisible(true); ch.setSize(800, 600); } }
実行すると下記画像のように円グラフが表示されます。
解説
円グラフ用のデータセットは11行目でインスタンス化を実施している「DefaultPieDataset」を利用します。
12~16行目ではsetValueメソッドを使用して、表示名と何%割り振るのかを決めています。
3Dの円グラフを描画するには18行目で記述しているように「createPieChart3D」メソッドを利用することで描画可能です。
20行目が実際にフレームに表示するためのオブジェクトを作成している部分で、18行目で作成したグラフ情報を設定することで、フレーム上にグラフが表示出来るようになります。
棒グラフを描画するJavaサンプルプログラム
続いて同じく利用される機会の多い「棒グラフ」をJFreeChartで描画していきます。
サンプルコード
package chart; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartFrame; import org.jfree.chart.JFreeChart; import org.jfree.data.category.DefaultCategoryDataset; public class Main { public static void main(String args[]) { DefaultCategoryDataset dcd = new DefaultCategoryDataset(); dcd.addValue(1000, "北海道支社", "2018"); dcd.addValue(400, "北海道支社", "2019"); dcd.addValue(600, "北海道支社", "2020"); dcd.addValue(800, "兵庫支社", "2018"); dcd.addValue(900, "兵庫支社", "2019"); dcd.addValue(500, "兵庫支社", "2020"); JFreeChart chart=ChartFactory.createBarChart3D("年度別売上", "年度", "万円", dcd); ChartFrame ch = new ChartFrame("棒グラフサンプル", chart); ch.setVisible(true); ch.setSize(800, 600); } }
実行結果が下記です。
解説
棒グラフ用のデータセットには11行目で指定している「DefaultCategoryDataset」を利用します。
12~17行目の値の設定方法も、DefaultCategoryDatasetでは「addValue」メソッドを使用します。
19行目が棒グラフを指定する部分で「createBarChart3D」メソッドを利用することで描画することが可能です。
ガントチャートを描画するJavaサンプルプログラム
スケジュール管理で利用するガントチャートをグラフとして表示したいという要望も多いので、「ガントチャート」もJFreeChartで描画してみましょう。
サンプルコード
package chart; import java.util.Calendar; import java.util.Date; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartFrame; import org.jfree.chart.JFreeChart; import org.jfree.data.gantt.Task; import org.jfree.data.gantt.TaskSeries; import org.jfree.data.gantt.TaskSeriesCollection; public class Main { public static void main(String args[]) { TaskSeriesCollection data = new TaskSeriesCollection(); TaskSeries series = new TaskSeries("スケジュール"); Task task1 = new Task("要件定義", formatData(2021, 4, 1), formatData(2021, 6, 30)); Task task2 = new Task("基本設計", formatData(2021, 7, 1), formatData(2021, 9, 30)); Task task3 = new Task("詳細設計", formatData(2021, 10, 1), formatData(2022, 1, 31)); Task task4 = new Task("開発", formatData(2022, 2, 1), formatData(2022, 6, 30)); Task task5 = new Task("テスト", formatData(2022, 3, 1), formatData(2022, 8, 31)); Task task6 = new Task("運用", formatData(2022, 9, 1), formatData(2023, 8, 31)); series.add(task1); series.add(task2); series.add(task3); series.add(task4); series.add(task5); series.add(task6); data.add(series); JFreeChart chart=ChartFactory.createGanttChart("Sampleプロジェクト", "工程", "日程", data); ChartFrame ch = new ChartFrame("ガントチャートサンプル", chart); ch.setVisible(true); ch.setSize(800, 600); } static Date formatData(int year, int month, int date){ Calendar calendar = Calendar.getInstance(); calendar.set(year, month - 1, date); return calendar.getTime(); } }
実行結果が下記の画像です。
解説
ガントチャート作成には「TaskSeriesCollection」と「TaskSeries」と呼ばれる2つのデータセットを利用します。
29~36行目で実施しているように、2つのデータセットでは「add」メソッドを使用してデータの設定を実施します。
38行目がガントチャートを指定する部分で「createGanttChart」メソッドを利用することで描画することが可能です。
さいごに: Javaでグラフを描画するならライブラリを活用しよう
本記事では、Javaでグラフを描画する際に役立つ「JFreeChart」についてサンプルコードを掲載しながらご紹介してきました。
基本的な流れはグラフの種類に関わらずほとんど同じで、グラフの種類によって若干記述を修正するだけで様々なグラフを描画することが可能です。
JFreeChart以外にも様々なライブラリが提供されているので、ご自身の要望に合ったライブラリを見つけて手軽にJavaでのグラフ描画を実現してみてください。