JFreeChartサンプル



■ 前書き

・これからJFreeChartについての解説をアップしていきます。本記事は目次となります。

・経緯と意図は次のとおりです。

・私はArtery(ベクター⇒プログラミング⇒Java言語からダウンロード可能)というJava用のライブラリを作っていて、その中にJFreeChart用の機能があります。しかしJFreeChartは使っている人は少ないので、JFreeChart自体の説明サンプルも入れています。

・上記のJFreeChartのサンプルを紹介します。ただすべてをアップするのは、かなり量があるのと、えげつないので、一部有用そうなサンプルを抜粋します。

・サンプルは未作成の部分が多々あり、また既存部分も整理しますので、アップには時間がかかります。


■ ヴァージョン

・JFreeChartの[本家](http://www.jfree.org/jfreechart/index.html)のダウンロードは[SourceForge](https://sourceforge.net/projects/jfreechart/files/)を指しています。ヴァージョンは1.0.19。

・だがしかし、本家からはリンクしていませんが、[GITHUB](https://github.com/jfree/jfreechart)にもあります。ヴァージョンは1.5.0。

・今のところ、私のサンプルは1.0.19で書いています。


■ 概説

・JFreeChartの要素には次のものがある。
　・Plot,Dataset,Renderer,Axis

・Plot
　・グラフの表示領域。この中に複数のグラフが表示される。
　・表示するチャートに応じたPlotを選択する。例えばパイチャートであればPiePlot。
　・Plotの上位概念としてChartがある。Chartには複数のPlotを入れることができるが、多くの場合は一つのPlot。

・Dataset
　・表示データを格納するクラス。かなり多くのクラスがある。
　・Plotと表示するグラフと元データの形式に応じて適切なDatasetを選択する。
　・注意、メソッドの構成、メソッド名、引数の順番、引数の構造などがわりと統一されていない。

・Renderer
　・グラフの具体的な表示を行う。こちらもかなり数が多い。
　・例えば棒グラフであれば、BarRendererを使用する。
　・RendererはPlotに対して指定するが、グラフに対して指定することも可能。
　・Plotに指定した場合は、色やポイントの形状などは自動的に決定される。
　・グラフごとに指定する場合は、全責任を負う必要があり、かなり大変。
　　・例えばPlotに対して指定をして、特定のグラフに対して必要な部分のみを変更する。例えば線の太さを変更する。このようにするのが実用的。

・Axis
　・X軸(DomainAxis)とY軸(ValueAxis)。
　・代表的なものは数値や日時の軸。対数軸もあり。
　・上下限はデータを見て自動的に決定してくれるが、自分で設定することも可能。
　・上下限をデータより狭く設定するとグラフが拡大して表示される。
　・SymbolAxisは離散値の軸。この場合は階段状に表示したいのでStepRendererを使用する。

・イベント
　・画面上を右クリックするとPlotに応じたメニューが表示される。
　・メニューを消すことも、別メニューの表示も可能。別メニューは自己責任でプログラミング。
　・画面をドラッグすると拡大することができる。
　・クリック時に十字線を表示したり、データを取得することができる。
　・しかしリスナーの中でデータを取得すると一回前のデータが取得されるので、別途スレッドで取得する。
　・取得したデータはdoubleなので、日時などの意味のあるデータに変換する必要があるかも。
　・値は取得できるが、どのグラフかは不明なので、データを検索してグラフを決定する必要がある。


■ 目次

///////////////////////////////////////////////////////////
// いろいろなチャート

[パイチャート](https://qiita.com/artery/items/4e2d5d0c3b9bf068ea4a)
[パイチャート-DefaultPieDatasetの作成](https://qiita.com/artery/items/a60f11696b1e6773db0f)
[パイチャート-UIで特定データを強調する](https://qiita.com/artery/items/e19dcef72d0f5541706a)

[複数パイチャート](https://qiita.com/artery/items/531040f41b39544956f5)
[複数パイチャート/DefaultCategoryDatasetの作成★]

[レーダーチャート/SpiderWebChart](https://qiita.com/artery/items/a6a9f1ff3db5681cd03e)
[レーダーチャート(SpiderWebChart)-ArMatrixからCategoryDatasetを作成](https://qiita.com/artery/items/f705a6ba94fb01e81661)
[レーダーチャート/SpiderWebChart/特定データの強調](https://qiita.com/artery/items/7a028e57b483d7b2156b)
[レーダーチャート/SpiderWebChart/UIで特定データを強調する](https://qiita.com/artery/items/11d907430769fec18d91)

[バブルチャート/BubbleChart](https://qiita.com/artery/items/ffb8aa8245589a616b38)
[バブルチャート/BubbleChart-DefaultXYZDatasetの作成](https://qiita.com/artery/items/ccbe44513b0e2c3a32de)
[バブルチャート/UIで特定データを強調する](https://qiita.com/artery/items/79fc003746561b73596f)

[バーチャート/BarChart](https://qiita.com/artery/items/6cf1e6e313b4dd89ab81)
[バーチャート/DefaultCategoryDatasetの作成-ArMatrixから作成する](https://qiita.com/artery/items/a053d8a4e579b003e75f)
[バーチャート/DefaultCategoryDatasetの作成-ArMatrixから作成する-続き](https://qiita.com/artery/items/595bd3d52a9aaf1ec42f)
[バーチャートに値を表示する](https://qiita.com/artery/items/842bd5204994772adaa8)
[バーチャート-UIで特定データを強調する](https://qiita.com/artery/items/1ec6bb1d0cc80a71f4b5)


// 三次元バーチャート


[積上げバーチャート](https://qiita.com/artery/items/03785f35b380e63d29d4)
[積上げバーチャート-Datasetの作成★]
[積上げバーチャート-特定データの強調](https://qiita.com/artery/items/59ce132483c141220b46)
[積上げバーチャート-特定データの強調-続き](https://qiita.com/artery/items/ff3db624b5a28aa31c89)
[積上げバーチャート-UIで特定データを強調する](https://qiita.com/artery/items/709621b500af5764238b)
[積上げバーチャート-人口構成図-DefaultKeyedValues2DDataset](https://qiita.com/artery/items/25a6172bd875ba5d6240)
[積上げバーチャート-人口構成図-DefaultKeyedValues2DDatasetの作成](https://qiita.com/artery/items/0f7ee56c53b97055ebaf)


[パレート図](https://qiita.com/artery/items/0af57a22f144469ca260)


// インターヴァルチャート/一つのxに対して二つのy値がある ⇒　例.最低気温と最高気温のグラフ.
[インターヴァルチャート-DefaultIntervalCategoryDataset](https://qiita.com/artery/items/f5923b4c3ee7ecc23543)
[インターヴァルチャート-DefaultIntervalCategoryDataset-Collectionから作成する](https://qiita.com/artery/items/280bd5a266ba1b9d2cbb)


// 複数値チャート-同一キーに複数の値
[複数値チャート-DefaultMultiValueCategoryDataset](https://qiita.com/artery/items/c2b834f23819ea5a8921)
[複数値チャート-DefaultMultiValueCategoryDataset-特定データの強調](https://qiita.com/artery/items/c4e57d6cd350f1b81811)
[複数値チャート-UIで特定データを強調する](https://qiita.com/artery/items/0416b52faf6becaf0c45)


// 平面上に■の領域を描く
[XYインターヴァルチャート/DefaultIntervalXYDataset](https://qiita.com/artery/items/3986aa786bf9017eb91d)
[XYインターヴァルチャート/DefaultIntervalXYDatasetの生成★]
[XYインターヴァルチャート/UIで特定データを強調する](https://qiita.com/artery/items/22384c81da19eb4a0024)

// DefaultXYDatasetを使う
[二次元分布チャート/DefaultXYDataset](https://qiita.com/artery/items/b7d12057b74cb445f57c)
[二次元分布チャート/XYChart/DefaultXYDatasetの作成/Collectionから作成する](https://qiita.com/artery/items/a1985891b8d0e24946cc)
[二次元分布チャート/レンダラを個別に指定する/特定データの強調](https://qiita.com/artery/items/df02eea8ee143c218c6a)
[二次元分布チャート/UIで特定データを強調する](https://qiita.com/artery/items/9ef40ee47010bda1621e)


// XYSeriesCollectionを使う
[二次元分布チャート/XYSeriesCollection](https://qiita.com/artery/items/6c0ac3f5ed92c93481df)
[二次元分布チャート-XYSeriesCollection-XYSeriesをCollectionから作成する.X,Y値はオブジェクトから取得する](https://qiita.com/artery/items/4e1cdfb2d67ff1432bd8)
[二次元分布チャート-XYSeriesCollection-XYSeriesをListから作成する.X値はListのインデックス、Y値はオブジェクトから取得](https://qiita.com/artery/items/35d6331b83ec93cd6a5f)
[二次元分布チャート-XYSeriesCollectionをMapMap&lt;T0,List&lt;T1&gt;&gt;から作成する.X,Y値はオブジェクトから取得する](https://qiita.com/artery/items/1f522fdb0a4f79ce4953)
[二次元分布チャート-XYSeriesCollection-レンダラを個別に指定する-特定データを強調する](https://qiita.com/artery/items/2b2df86ff8b426ec7df7)
[二次元分布チャート-XYSeriesCollection-UIで特定データを強調する](https://qiita.com/artery/items/dfc022a3a6938b0acc53)


[平均と標準偏差のチャート-DefaultStatisticalCategoryDataset](https://qiita.com/artery/items/468f99ddef9d64d0031c)
[平均と標準偏差のチャート-DefaultStatisticalCategoryDataset-Collectionから作成する](https://qiita.com/artery/items/ddef60cf24aac2d27a4a)


// 時系列チャート-TimeSeriesCollectionを使う
[時系列チャート/TimeSeriesCollection](https://qiita.com/artery/items/cec0e0137b63ccc2b02c)
[時系列チャート/TimeSeriesCollectionをMap&lt;T0,List&lt;T1&gt;&gt;から作成](https://qiita.com/artery/items/6b676c4d8424f58cec16)
[時系列チャート/TimeSeriesCollectionをArMatrix&lt;T0,T1,T2&gt;から作成](https://qiita.com/artery/items/e0c56f5c95e52c590ee5)
[時系列チャート/TimeSeriesCollection/UIで特定データを強調する](https://qiita.com/artery/items/12782ae7e3245ecacf22)


[ガントチャート-TaskSeriesCollection](https://qiita.com/artery/items/55eb0b868e8fbb31ed3a)

[PolarChart-極座標](https://qiita.com/artery/items/8853bc1e07f053c4f572)
[PolarChart-極座標-特定データを強調する](https://qiita.com/artery/items/bf5e18d1260a86f08622)
[PolarChart-極座標-UIで特定データを強調する](https://qiita.com/artery/items/65e05be1f369baa18f08)


// 多軸チャート

// SHLCデータのチャート



///////////////////////////////////////////////////////////
// レンダラ(Renderer)


///////////////////////////////////////////////////////////
// 軸(Axis)、グリッド、マーカー
[LogAxis-対数軸](https://qiita.com/artery/items/6295cd0d05f536a7009b)
[SymbolAxis,StepRender](https://qiita.com/artery/items/87e5abeb407a4f114c93)
[NumberAxis-目盛りの間隔の設定](https://qiita.com/artery/items/507dfba53a63f3e8fd6a)
[ExtendedCategoryAxis-軸の値に補足説明をつける](https://qiita.com/artery/items/6c0690aef0cc334aab8a)
[DateAxis](https://qiita.com/artery/items/f149efbf25d58c6577b0)


[グリッドを表示しないようにする](https://qiita.com/artery/items/71bec3c540af10beffed)
[グリッドの色と太さを変える](https://qiita.com/artery/items/bf18b8116a3a5bdfa7fc)
[上限線、下限線の設定](https://qiita.com/artery/items/a524b69945f0528080ba)
[チャートの拡大と縮小](https://qiita.com/artery/items/0bacdd37da54ee499f5c)
[X軸が共通な二つのグラフを上下に表示する](https://qiita.com/artery/items/8e195c01176221a966dc)
[X軸が共通な二つのグラフを重ねて表示する](https://qiita.com/artery/items/f3a67b781d8ac9c2bccc)




///////////////////////////////////////////////////////////
// イベント処理(Event)
[XYPlot-マウスの動きに応じて十字線と値を表示する](https://qiita.com/artery/items/e01be3afc1da73919ea7)
[XYPlot-マウスの動きに応じて十字線と値を表示する-ArXYPlotMouseMovedHandlerを使用](https://qiita.com/artery/items/80cd7c266f5bc2b74e6e)
[XYPlot-クリック時に値を取得し十字線を表示する](https://qiita.com/artery/items/978f4f72422614137ec5)
[XYPlot-クリック時に値を取得し十字線を表示する-ArcXYPlotMouseClickedHandlerを使用-0](https://qiita.com/artery/items/554526b728a99d63d251)
[XYPlot-クリック時に値を取得し十字線を表示する-ArcXYPlotMouseClickedHandlerを使用-1](https://qiita.com/artery/items/b1f9679552abc373fccf)


///////////////////////////////////////////////////////////
// 雑多
[参議院議員選挙(2019)開票速報](https://qiita.com/artery/items/2bd94ad2234f43910ad0)
[貸借対照表](https://qiita.com/artery/items/a4ab7ea6bcd5c3d02b6f)

==== ended.