JFreeChart では、いろいろなチャートがあるけど、表示するためのデータモデル (Dataset) も、これまた盛り沢山。 1つのデータモデル(を表すインターフェース)にいくつもの実装(クラス)があり、また、1つのデータモデルをいくつかのチャートとして表示できるので、なかなか全体像を把握するのが大変。 でも、逆にこのデータモデルを中心に分類すれば分かりやすいかなぁと思い、ちょっと分類&サンプル動かしてみました。
サンプルコードは一応 Groovy 使ってますが、Java が読めれば読めるかと。 コピペじゃ動きませんけど。
今回は PieDataset と WaferMapDataset を見ていきます。 クラス図は以下のようになります(ほとんどコレで分類終わってますけど):
- WaferMapDataset は具象クラスのため、それ自身インスタンス化できます。
- ValueDataset, KeyedValueDataset, HeatMapDataset はそれらから (ChartFactory によって) チャートを生成しないので、ここでは取り上げません。
- HeatMapDataset は Dataset のサブタイプではありませんが、その唯一の実装クラス (JFreeChart1.0.13) である DefaultHeatMapDataset は Dataset を実装しています。 おそらく単なる実装ミスかと。
PieDataset
円グラフとして表示するデータのデータモデル。
型定義
public interface PieDataset extends Dataset, KeyedValues
実装クラス
- DefaultPieDataset
- DefaultKeyedValuesDataset
- CategoryToPieDataset
- JDBCPieDataset
- DefaultKeyedValuesDataset (KeyedValuesDataset の実装クラス)
PieDataset インスタンスの取得例
def data = new DefaultPieDataset() data.setValue('Dark Energy', 72) data.setValue('Dark Matter', 23) data.setValue('Atoms', 4.6)
参考 URL : 「Dark matter」
PieDataset を要求するチャート
- PieChart
- PieChart3D
- RingChart
PieChart
ChartFactory.createPieChart('Pie Chart', data, true, true, true)
PieChart3D
ChartFactory.createPieChart3D('Pie Chart 3D', data, true, true, true)
RingChart
ChartFactory.createRingChart('Ring Chart', data, true, true, true)
WaferMapDataset
「wafer」とは・・・ウエハース 《薄い軽焼き菓子》。 ワッフルとは関係ない? シリコン・ウェーハーなどのウェーハー。
型定義
public class WaferMapDataset implements Dataset
WaferMapDataset インスタンスの取得例
import org.jfree.data.general.WaferMapDataset def rand = new Random(1L) def int n = 10 def data = new WaferMapDataset(n, n) 100.times{ data.addValue(rand.nextInt(5), rand.nextInt(n), rand.nextInt(n)) }
WaferMapDataset を要求するチャート
- WaferMapChart
WaferMapChart
ChartFactory.createWaferMapChart('Wafer Map Chart', data, PlotOrientation.VERTICAL, true, true, true)