サンプルも無事に動いてくれたので、次はサンプルコードをもう少し詳しく見てみます。
サンプルコードは前々回に動かしたものを取り上げます(ただし、import 文章略。 また、一部変更しています):
def builder = new ChartBuilder() // 1. ChartBuilder のインスタンスを生成する def areachart = builder.xyareachart( // 2-1. chart ノードの構築 title:'BMI Index Graph', XAxisLabel: 'weight (Kg)', YAxisLabel: 'height (m)', orientation:PlotOrientation.VERTICAL, legend:true, tooltips:false, urls:false) { xyseries { // 2-2. dataset ノードの構築 for(int weight = 0; weight < 150; weight += 10) { point('Overweight', x: weight, y: Math.sqrt(weight / 35.0d)) point('Normal', x: weight, y: Math.sqrt(weight / 25.0d)) point('Underweight', x: weight, y: Math.sqrt(weight / 18.0d)) } } xyplot { // 2-3. plot ノードの構築 datasetRenderingOrder(DatasetRenderingOrder.FORWARD) foregroundAlpha(1.0f) rangeGridlinePaint(Color.BLACK) domainGridlinePaint(Color.BLACK) domainaxis { lowerBound(30) upperBound(135) } rangeaxis { lowerBound(0.75d) } renderer { outlinePaint(Color.BLACK) outlineStroke(new BasicStroke()) seriesPaint(0, paint: new Color(0xff, 0, 0)) seriesPaint(1, paint: new Color(255,255,50)) seriesPaint(2, paint: new Color(0xff, 0x66, 0x33)) } } } def frame = new SwingBuilder().frame( title:'This is a Frame', location:[100,100], size:[800,400], defaultCloseOperation:WC.EXIT_ON_CLOSE){ widget(new ChartPanel(areachart.chart)) // 3. JFreeChart オブジェクトを取得する } frame.visible = true
大雑把な手順としては以下のようになっているようです:
- ChartBuilder のインスタンスを生成する (builder = new ChartBuilder())
- 以下の順にチャートを構築する
- chart ノード (builder.xyareachart)
- dataset ノード (xyseries)
- plot ノード (xyplot)
- ChartBuilder の構築で得られたオブジェクトから JFreeChart オブジェクトを取得する (areachart.chart)
JFreeChart オブジェクトが得られた後は、「Groovy+JFreeChart」でやったように、ChartPanel を生成して、それを JFrame に埋め込みます。
ノードの順番は大事?
dataset ノード (xyseries) と plot ノード (xyplot) の順番を入れ替えると、データが表示されなくなります(座標は表示されますが)。 plot ノードの子ノードは順番を入れ替えて試してないので分かりません。 ものによっては上書きされたりするかもしれません。
一方、(xyareachart ノードに渡しているtitle, XAxisLabel などの)属性は順番を変えても結果には影響しません(当たり前か)。 JFreeChart では ChartFactory#createXxxxChart() に渡す引数が最初面食らいますが、GroovyChart では順番を気にする必要はありません。 代わりに属性名を指定しないといけないので、コーディング量はちょっと増えますが・・・*1
- 作者: Dierk Konig,Andrew Glover,Paul King,Guillaume Laforge,Jon Skeet,杉浦孝,櫻井正樹,須江信洋,関谷和愛,佐野徹郎,寺沢尚史
- 出版社/メーカー: 毎日コミュニケーションズ
- 発売日: 2008/09/27
- メディア: 単行本(ソフトカバー)
- 購入: 5人 クリック: 146回
- この商品を含むブログ (121件) を見る
*1:いくつかの属性は省略することができるので、一概にコーディング量が増えるとも言えませんが。