倭マン's BLOG

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

GroovyChart と戯れて (5) : チャートを表示させるのに最低限必要なのは?

今回は、GroovyChart でチャートを表示させるために最低限必要なコードを見ていきます。 サンプルコードは前回使ってたものをベースに考えます。

plot ノード


データセットがないとグラフの描きようがないので、dataset ノードはおいておきましょう。 なので、まずは plot ノード (xyplot) を取り除きましょう。

def builder = new ChartBuilder()
def areachart = builder.xyareachart(
        title:'BMI Index Graph', XAxisLabel: 'weight (Kg)', YAxisLabel: 'height (m)',
        orientation:PlotOrientation.VERTICAL,
        legend:true, tooltips:false, urls:false) {

    xyseries {
        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))
        }
    }
}
// 後は同じ

「後は同じ」部分は ChartPanel を生成して JFrame に埋め込む部分です(以下同じ)。 このコードを実行すると下図のようになります:


うわッ! くすんでる!

一応表示されたので、良しとすべき・・・とはならないよね? 一番簡単なくすみ取りは、xyareachart ノード下に

    xyplot{
        foregroundAlpha(1.0f)
    }

を付け加えることです。 まぁ、我慢の効くレベルかな?

chart ノードの属性


chart ノード (xyareachart) に渡す属性 (title, XAxisLabel など) は、見るからに JFreeChart の ChartFactory#createXxxxChart() メソッドに渡される値でしょう*1。 そこでは引数を省略することはできませんでしたが、ここではマップとして渡しているので引数を省略できるか試してみると、PlotOrientation 以外は省略可能なようです。

orientation 属性のみを指定したコード

def builder = new ChartBuilder()
def areachart = builder.xyareachart(orientation:PlotOrientation.VERTICAL) {
    xyseries {
        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))
        }
    }
}
// 後は同じ

を実行してみると


タイトルや軸のラベルまでもが削がれたくすみチャートが表示されます。 くすみ方が変わってるのは原因不明。

まぁ、こんな感じ。

Groovyイン・アクション

Groovyイン・アクション

*1:ChartBuilder で日本語化する際に ChartFactory#chartTheme を設定すれば良かったことからも、GroovyChart は ChartFactory を使っていると考えられます。 ソースコードまでは確かめてませんが。