倭マン's BLOG

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

JavaFX でサポートされているチャートの分類と PieChart

5日ほど前の記事JavaFX と GroovyFX のインストール方法を見ましたが、そこそこ手間をかけてインストールしたので、ちょっとライブラリをイジってみたいと思います。 とは言っても JavaFX ではあれこれいろいろサポートされているので、まずはチャートに関連するパッケージだけに絞ります。

参考 URL

JavaFX のチャート関連パッケージ


JavaFX ではチャート関連のクラスは javafx.scene.chart パッケージに定義されています。

JavaFX のチャート & データ

JavaFX でサポートされているチャートは

  • PieChart
  • AreaChart
  • BarChart
  • BubbleChart
  • LineChart
  • ScatterChart

の6つです(JavaFX 2.0)。 どれがどんなチャートかは追々見ていく予定。 JFreeChart に比べてかなりスリムなライブラリですね。 チャート数は少ないですが、よく使うチャートはきちんとサポートされている感じです。 で、各チャートのクラスは以下のような継承関係になっています:


は抽象クラス、オレンジは具象クラスです。 ついでに受け取るデータのクラスも描いておきました。 データに関しても JFreeChart では結構いろいろなクラスがありましたが、JavaFX では

  • PieChart.Data
  • XYChart.Data

の2つとシンプルです。

各チャートはコンストラクタから生成することもできますが、各チャートにそれぞれ用意されている ChartBuilder のサブクラス(PieChart に対して PieChartBuilder など)からインスタンス化することもできます。 ただし、この記事では GroovyFX によってチャートを構築するので ChartBuilder 関連のクラスは扱いません。

JavaFX の軸

JavaFX では、XYChart (のサブクラス)が使う軸 (axis) として

  • Category 軸
  • Number 軸

の2つがサポートされています。 JFreeChart では CategoryChart と XYChart が結構別々に扱われてるところもありましたが、JavaFX ではこれらのチャートは軸の違いだけしか異ならないようです。 軸に関するクラスの継承関係は以下のようになっています:


ここでもは抽象クラス、オレンジは具象クラスです。 これらのクラスに関しても ChartBuilder と同じように対応する AxisBuilder クラスのサブクラス群がありますが、やはりこの記事では扱いません。

PieChart


今回は PieChart の構築もやって見ましょう。 PieChart は pieChart ノードを使って構築します。 チャートを構築する際に結構面倒なのはデータの設定です。 GroovyFX ではデータの構築自体はビルダーによってサポートされていないようで、単純な Map オブジェクトか JavaFX のコレクションを使った方法でデータを構築する必要があるようです。 作成したデータは pieChart ノードの data 属性としてチャートに渡します。

では、具体的に GroovyFX のコードを見ていきましょう。 まずは Map を使ってデータを作成する方法:

import groovyx.javafx.GroovyFX
import groovyx.javafx.SceneGraphBuilder

GroovyFX.start {
    new SceneGraphBuilder().stage(title:'Pie Chart', width:500, height:500, visible:true) {
        scene {
            pieChart(title:'Pie Chart', data:[first:0.25f, second:0.25f, third:0.25f])    // データをマップとして渡す
        }
    }
}

特にどうということもありませんね。 pieChart の title 属性は必須ではありません。 ちょっとつけてみただけ。 実行すると以下のようなチャートが表示されます:


次は JavaFX のコレクションを使ったデータ構築。 PieChart のデータは PieChart.Data クラスのインスタンスとして作成しますが、その List や配列を単純に pieChart ノードには渡せなくて、javafx.collections.FXCollections クラスを使って javafx.collections.ObservableList オブジェクトに変換してやる必要があります。 面倒です。 そのうち改善されることを希望しますが。 まぁ、データができれば後は簡単です:

import groovyx.javafx.GroovyFX
import groovyx.javafx.SceneGraphBuilder
import javafx.collections.FXCollections
import javafx.scene.chart.PieChart

def pieData = FXCollections.observableArrayList([    // JavaFX のコレクション
    new PieChart.Data("Yours", 42), 
    new PieChart.Data("Mine", 58)
])

GroovyFX.start {
    new SceneGraphBuilder().stage(title:'Pie Chart', width:550, height:500, visible:true) {
        scene {
            pieChart(data:pieData)
        }
    }
}

実行すると以下のように表示されます:


プログラミングGROOVY

プログラミングGROOVY


JavaFX 2.0: Introduction by Example

JavaFX 2.0: Introduction by Example