読者です 読者をやめる 読者になる 読者になる

Groovyでグラフを作成する 4)日付表示を“日-月”から“月/日”に変更する 設定方法のバリエーション編

groovy

id:wamanからコメントをもらった

目盛りの表示を変えるには、渡すデータでなく、軸のプロパティを設定しないといけないかと。
GroovyChart での設定の仕方は分かりませんが、JFreeChart の Java API を Groovy で扱う場合、JFreeChart オブジェクトの chart に対して

chart.plot.domainAxis.dateFormatOverride = new SimpleDateFormat(’MM月dd日’)

とすると ”09月30日” のように表示できます。 ちなみに、SimpleDateFormat は java.text パッケージのクラスです。

1. Groovyでグラフを作成する 4)日付表示を“日-月”から“月/日”に変更する リベンジ編で使った方法
chart.chart.getPlot().getDomainAxis().setDateFormatOverride( 
    new java.text.SimpleDateFormat("MM/dd"))
2. id:wamanからコメントで教えてもらった方法
chart.chart.plot.domainAxis.dateFormatOverride = 
    new java.text.SimpleDateFormat("MM/dd")
3. 合わせたような方法
chart.chart.plot.domainAxis.setDateFormatOverride( 
    new java.text.SimpleDateFormat("MM/dd"))


Groovy的に適切かは分からないけど、今回の処理だと、設定を上書きするようなイメージなので、
3のメンバーアクセスでsetメソッドを使うのが、自分のイメージに近いかな。




import com.thecoderscorner.groovychart.chart.ChartBuilder
import groovy.swing.SwingBuilder
import java.awt.BorderLayout
import java.awt.Dimension
import org.jfree.chart.ChartFactory
import org.jfree.chart.ChartPanel
import org.jfree.chart.JFreeChart;
import org.jfree.data.time.Day
import org.jfree.chart.StandardChartTheme


ChartBuilder builder = new ChartBuilder();



chart = builder.timeserieschart(title:'2010年9月の平均気温',
    timeAxisLabel:'日付',
    valueAxisLabel:'気温(℃)',
    legend:true,
    tooltips:false,
    urls:false
) {
    timeSeriesCollection {
        timeSeries(name:'気温', timePeriodClass:'org.jfree.data.time.Day') {
            add(period:new Day(1,9,2010), value:27.4)
            add(period:new Day(2,9,2010), value:27.5)
            add(period:new Day(3,9,2010), value:29.1)
            add(period:new Day(4,9,2010), value:28.7)
            add(period:new Day(5,9,2010), value:27.9)
            add(period:new Day(6,9,2010), value:29.3)
            add(period:new Day(7,9,2010), value:29.2)
            add(period:new Day(8,9,2010), value:25.3)
            add(period:new Day(9,9,2010), value:24.4)
            add(period:new Day(10,9,2010), value:24.1)
            add(period:new Day(11,9,2010), value:27.7)
            add(period:new Day(12,9,2010), value:27.9)
            add(period:new Day(13,9,2010), value:29.5)
            add(period:new Day(14,9,2010), value:25.1)
            add(period:new Day(15,9,2010), value:22.3)
            add(period:new Day(16,9,2010), value:20.9)
            add(period:new Day(17,9,2010), value:22.7)
            add(period:new Day(18,9,2010), value:24.2)
            add(period:new Day(19,9,2010), value:24.5)
            add(period:new Day(20,9,2010), value:24.8)
            add(period:new Day(21,9,2010), value:25.5)
            add(period:new Day(22,9,2010), value:28.3)
            add(period:new Day(23,9,2010), value:21.2)
            add(period:new Day(24,9,2010), value:18.5)
            add(period:new Day(25,9,2010), value:19.9)
            add(period:new Day(26,9,2010), value:18.9)
            add(period:new Day(27,9,2010), value:18.0)
            add(period:new Day(28,9,2010), value:19.7)
            add(period:new Day(29,9,2010), value:21.7)
            add(period:new Day(30,9,2010), value:19.4)
        }
    }

}

ChartFactory.setChartTheme(StandardChartTheme.createLegacyTheme())

chart.chart.plot.domainAxis.setDateFormatOverride( new java.text.SimpleDateFormat("MM/dd"))
def chartPanel = new ChartPanel(chart.chart, false);
chartPanel.setPreferredSize(new Dimension(0, 40));
chartPanel.setMouseZoomable(true, false);

builder.chartAsPNG(new FileOutputStream('.\\chart\\ChartSampleTemperature7.png'), 800, 400);

SwingBuilder swing = new SwingBuilder();
def frame = swing.frame(
            title:'This is a Frame',
            location:[100,100],
            size:[800,400],
            defaultCloseOperation:javax.swing.WindowConstants.EXIT_ON_CLOSE);

frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add( chartPanel, java.awt.BorderLayout.CENTER);
frame.setVisible(true)

実行環境














Groovyの詳細についてはJavadocと以下の書籍を参考にしている。

Groovyイン・アクション
Dierk Konig Andrew Glover Paul King Guillaume Laforge Jon Skeet
毎日コミュニケーションズ
売り上げランキング: 294340



Groovyイン・アクションを読むならあった方が便利かな。

ブックストッパー

トモエ算盤
売り上げランキング: 614


薄い本は「ほんたった」で立ててる

EDISON ほんたった黒(ハードケース入り)
株式会社エジソン
売り上げランキング: 2164