Rainbow Planet (GT×IT×SP×SA)

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

01_IT技術 (Technology) 03_Java

JFreeChartを使ってJavaで様々なグラフを簡単に描画する方法

投稿日:2020年5月4日 更新日:

(0)目次&概説

(1) 記事の目的
 (1-1) 目的
(2) JFreeChartの概要
 (2-1) JFreeChartとは?
 (2-2) JFreeChartのアーキテクチャについて
(3) JFreeChartの導入手順
 (3-1) ライブラリのダウンロード
 (3-2) ライブラリの配置
(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) ライブラリの配置

解凍したら、必要となる「jarファイル」2個をJavaアプリケーション配下の「WEB-INF/lib」に配置します(※「X.X.X」はバージョン番号)

①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)

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-01_IT技術 (Technology), 03_Java

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

JFreeChartの折れ線グラフ(LineChart)をより綺麗に見せるための11個のテクニック

(0)目次&概説 (1) 記事の目的 (2) LineChartの表示改善  (2-1)【線】線の太さを変更  (2-2)【線】各シリーズ(Series)毎に折れ線の色を設定  (2-3)【線】各シリ …

JSPとは?役割や基本文法およびHelloWorldのサンプルプログラムの紹介

(0)目次&概説 (1) JSPの基本  (1-1) JSPとは?  (1-2) JSPのHelloWorld (2) JSPの基本文法  (2-1) ディレクティブ  (2-2) アクションタグ   …

OracleDBのメディア障害やインスタンス障害からの復旧について

(0)目次&概説 (1) 障害復旧について  (1-1) インスタンス障害  (1-2) メディア障害   (1-2-1) 制御ファイル   (1-2-2) REDOログファイル   (1-2-3) …

Javaのstatic変数とは?その特徴及び付けた場合と付けない場合の違いを解説

(0)目次&概説 (1) static修飾子  (1-1) staticメンバとは?  (1-2) static変数   (1-2-1) static変数の説明と特徴   (1-2-2) static …

Linux:定期的に再起動するスクリプト

Linuxサーバーを定期的に再起動するスクリプトを紹介します。定期的に再起動するという処理はシステム構築においては、運用の中で定義される「死活監視」に関連してくる話になります。 ●シェルとは?シェルス …

Top