ChartBuilder はデータ (dataset) とチャートの表示設定をビルダーで構築できるライブラリで、今まで見てきたサンプルでは、データと表示設定を1回のビルダー構築で行っていました。 ただし、この方法では、データ構造や表示設定のカスタマイズが複雑になってくるとチョット書くのが面倒になってしまうし、MVC モデルを採用しようとしたときにモデルとビューの分離ができなくなりそうです。
そこで、今回はデータを別途用意して、ChartBuilder にはビューの構築のみをさせる方法を見ていきます。
データの生成
今回はデータを別途用意するので、「Groovy+JFreeChart」でやったように Dataset オブジェクト(ここでは XYSeriesCollection オブジェクト)を生成します。
def dataset = new XYSeriesCollection() dataset.with{ addSeries(new XYSeries('Overweight')) addSeries(new XYSeries('Normal')) addSeries(new XYSeries('Underweight')) for(int weight = 0; weight < 150; weight += 10) { getSeries('Overweight').add(weight, Math.sqrt(weight / 35.0d)) getSeries('Normal').add(weight, Math.sqrt(weight / 25.0d)) getSeries('Underweight').add(weight, Math.sqrt(weight / 18.0d)) } }
もっとスマートに生成する方法があるかも知れませんが、まぁ、今回の話の本筋とは関係ないので(dataset の構築は次回以降に)。
外部データからチャートを生成する
では、(ChartBuilder の)外部で作成したデータを ChartBuilder に渡す方法を見ていきましょう。
「以前の記事」で、ChartBuilder では chart ノード(今までのサンプルでは xyareachart)に渡す属性は JFreeChart の ChartFactory#createXxxxChart() メソッドに渡す引数になってそうだということを見ましたが、そのメソッドにはデータ (dataset) も渡す必要があったので、逆に chart ノードの属性にデータを渡せるのではないかと期待できます。 実際にdataset というキーで Dataset オブジェクトを渡してみると
def chart = builder.xyareachart( title:'BMI Index Graph', XAxisLabel: 'weight (Kg)', YAxisLabel: 'height (m)', dataset:dataset, orientation:PlotOrientation.VERTICAL) { xyplot { foregroundAlpha(1.0f) } }
ばっちりチャートが表示されます! 期待したことが期待通りに動くライブラリってしびれるぅ!
- 作者: Dierk Konig,Andrew Glover,Paul King,Guillaume Laforge,Jon Skeet,杉浦孝,櫻井正樹,須江信洋,関谷和愛,佐野徹郎,寺沢尚史
- 出版社/メーカー: 毎日コミュニケーションズ
- 発売日: 2008/09/27
- メディア: 単行本(ソフトカバー)
- 購入: 5人 クリック: 146回
- この商品を含むブログ (121件) を見る