倭マン's BLOG

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

はじめての幻獣 Griffon 研 (12) : Charts プラグインでグラフを描画する (1) install-plugin charts

今回は Charts プラグインを使ってグラフを描いてみます(一覧)。 前回までサンプルで使っていた「関数描画アプリケーション」への適用は次回に(予定)。 

Charts プラグインは JFreeChart をベースにしたグラフ描画ツールで、Groovy の Builder を用いて構築できるようにする ChartBuilder も含まれています。 詳しくはこちら(といってもあんまり詳しく書いてませんが)。

Charts プラグインのインストール


まずは Charts プラグインをインストール。 以下のコマンドを実行します:

griffon install-plugin charts

さて、これで準備は万端。 チャートを描画するには次の2つの方法があります(他にもあるかな?)。

  • JFreeChart の API で描く
  • 別スクリプトに ChartBuilder で描く

今回見ていく方法は静的、つまり決まったデータで最初に描画し、以降変化しない方法です。 よって、今回扱うのは View のみ。 動的な描画は次回に考えます。 もしかしたら、描画方法が結構変わるかも知れませんがご了承を。

JFreeChart の API で描く


まずは JFreeChart の API を使う方法。 JFreeChart の使い方を詳細に見ていくのはこの記事の本筋からずれるのでここでは深入りしないことにします。 Griffon で特有なのは、作成した JFreeChart オブジェクトを chart ノードに渡すことです。 サンプルコードはこんな感じ:

// JFreeChart のクラスを import
import org.jfree.chart.ChartFactory
import org.jfree.data.general.DefaultPieDataset

application(...) {
    chart(newChart())    // chart ノードに JFreeChart オブジェクトを渡す
}

// JFreeChart の API によってチャートを作成
def newChart(){
    def dataset = new DefaultPieDataset();
    dataset.with{
        setValue('Apr', 10)
        setValue('May', 30)
        setValue('June', 40)
    }

    return ChartFactory.createPieChart('Pie Chart Sample', dataset, true, true, true)
}

実行結果はこんな感じ:

別スクリプトに ChartBuilder で描く


次は ChartBuilder で描く方法。 チャートを構築するスクリプトは別ファイルに描くようにします。 最初にこのスクリプトを以下のコマンドで生成します:

griffon create-chart sample-pie

このコマンドによって「SamplePieChart.groovy」という Groovy ファイルが作成されます(接尾辞 "Chart" は自動で付与されます):

  • ${baseDir}/griffon-app/charts/../SamplePieChart.groovy

「..」の部分はパッケージ階層に対応したフォルダ構造です。 このファイルは生成時に以下のような内容になっています:

import java.awt.Color
import java.awt.Font
import org.jfree.chart.labels.PieToolTipGenerator

def largeFont = new Font("Arial", Font.BOLD, 15);

piechart3d(title: "Simple Pie Chart") {
    defaultPieDataset {
        Series1(40.0f)
        Series2(30.0f)
        Series3(30.0f)
    }
    antiAlias = true
    backgroundPaint(Color.WHITE)

    pieplot {
        sectionOutlinesVisible false
        labelFont largeFont
        labelGap 0.02
        toolTipGenerator ({ dataset, key -> return "[${dataset} ${key}]" as String } as PieToolTipGenerator)

        sectionPaint('Series1', paint: new Color(255,0,0))
        sectionPaint('Series2', paint: new Color(0,255,0))
        sectionPaint('Series3', paint: new Color(0,0,255))
    }
}

まぁ今回は動作確認なので、内容はこのままにしておきましょう。 View からこのチャートを描画するには、以下のように chart ノードにスクリプトの Class オブジェクトを渡します:

application(...) {
    chart(SamplePieChart.class)
}

実行するとこんな感じ:


次回は Charts プラグインを「関数描画アプリケーション」に適用します(予定)。
Java Swing Hacks ―今日から使える驚きのGUIプログラミング集

Java Swing Hacks ―今日から使える驚きのGUIプログラミング集