折れ線グラフ(XY Line Chart)の横軸に時(Hour)を表示する
目的
下の様な時間単位に集計した結果を XY Line Chartにして9時から始まり翌日の8時までのメモリを設定します。
ソースコード
final XYSeriesCollection data = new XYSeriesCollection(); int n = 1; for( ReportBean row: src){ XYSeries series = new XYSeries("属性"+n++); Integer[] values = new Integer[]{ row.num_09,row.num_10,row.num_11,row.num_12, row.num_13,row.num_14,row.num_15,row.num_16, row.num_17,row.num_18,row.num_19,row.num_20, row.num_21,row.num_22,row.num_23,row.num_24, row.num_01,row.num_02,row.num_03,row.num_04, row.num_05,row.num_06,row.num_07,row.num_08 }; int i =0; for( Integer value: values){ series.add(i++, value); } data.addSeries(series); } final JFreeChart chart = ChartFactory.createXYLineChart("", "時", "人数", data, PlotOrientation.VERTICAL, true, true, false); // 判例の書式を設定 chart.getLegend().setItemFont(font); chart.setBackgroundPaint(Color.WHITE);; XYPlot plot = (XYPlot) chart.getPlot(); // X軸の設定 String[] xLabels = new String[]{ "9時" ,"10時","11時","12時", "13時","14時","15時","16時", "17時","18時","19時","20時", "21時","22時","23時","24時", "1時" ,"2時" ,"3時" ,"4時", "5時" ,"6時" ,"7時" ,"8時", } SymbolAxis xAxis = new SymbolAxis("時", xLabels ); // X軸の目盛りの間隔 xAxis.setTickUnit(new NumberTickUnit(1)); xAxis.setRange(0, 23); // X軸の目盛りの設定を描画に反映 plot.setDomainAxis(xAxis);
やっていること
XYSeries への値設定
系列別(一つの折れ線)に値を設定するときに、XYSeries#add(x,y)
で値を設定するときにx=0に9時の値、x=1に10時の値、x=2に11時の値・・・を設定し、左から9時、10時、11時~並ぶようにします。
SymbolAxis を使って目盛りを設定
- ラベルの文字列を
String[] xLabels
に設定します。XYSeriesへの設定と同様に9時から始まります。 xAxis.setTickUnit(new NumberTickUnit(1))
で目盛りを1単位にします。xAxis.setRange(0, 23)
で値の範囲を0~23に固定します。plot.setDomainAxis(xAxis)
で目盛りの設定を描画に反映します。