倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

Dataset で分類する Chart あれこれ (1) : PieDataset, WaferMapDataset

JFreeChart では、いろいろなチャートがあるけど、表示するためのデータモデル (Dataset) も、これまた盛り沢山。 1つのデータモデル(を表すインターフェース)にいくつもの実装(クラス)があり、また、1つのデータモデルをいくつかのチャートとして表示できるので、なかなか全体像を把握するのが大変。 でも、逆にこのデータモデルを中心に分類すれば分かりやすいかなぁと思い、ちょっと分類&サンプル動かしてみました。

サンプルコードは一応 Groovy 使ってますが、Java が読めれば読めるかと。 コピペじゃ動きませんけど。

今回は PieDatasetWaferMapDataset を見ていきます。 クラス図は以下のようになります(ほとんどコレで分類終わってますけど):

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