JfreeChart中的timeSeries(時序圖)使用示例
生成時序圖:
JFreeChart chart = ChartFactory.createTimeSeriesChart( String title, // 圖標題 String timeAxisLabel, //x 軸標題 String valueAxisLabel, //y 軸標題 XYDataset dataset, // 數據源 boolean legend, // 是否顯示圖例 boolean tooltips, // 是否顯示 tooltip boolean urls); // 是否指定 url
時序圖的 Plot 對象是 XYPlot 類型。 XYPlot 對象的 x 軸是 DateAxis 對象, y 軸是 NumberAxis 對象,繪制單元是 XYLineAndShapeRenderer 對象,數據源是 XYDataset 對象。
//Plot 對象的獲取操作: XYPlot plot = (XYPlot) chart.getPlot(); //X 軸對象的獲取操作: DateAxis xAxis = (DateAxis) plot.getDomainAxis(); //Y 軸對象的獲取操作: NumberAxis yAxis =(NumberAxis) plot.getRangeAxis(); //Renderer 對象的獲取操作: XYItemRenderer renderer= plot.getRenderer();
時序圖可以接受一切 XYDataset 類型的數據源,下面講解一下常用的 XYDataset 類型 TimeSeriesCollection 的使用方式。
//實例化: TimeSeriesCollection dataset=new TimeSeriesCollection(); //添加數據操作: dataset. addSeries(TimeSeries); // 后面講解 TimeSeries 對象 //刪除數據操作: dataset. removeSeries(int index); //查詢數據操作 : dataset. getSeries(int series);
TimeSeries 對象操作
//實例化: TimeSeries ts=TimeSeries(String name, Class timePeriodClass); //增加數據操作: ts. add(RegularTimePeriod period, double value); //刪除數據操作: ts. delete(RegularTimePeriod period); //修改數據操作: ts. update(RegularTimePeriod period, Number value); //查詢數據操作: ts. getValue(RegularTimePeriod period);
類 RegularTimePeriod 是 JFreeChart 提供的時間模板類,它有很多具體的時間類,比如: Minute 、 Second 、 Hour 、 Day…… 等,不再詳述
package com.px1987.jfreechart; import java.awt.Color; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartFrame; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.xy.XYItemRenderer; import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; import org.jfree.data.time.Day; import org.jfree.data.time.Hour; import org.jfree.data.time.Minute; import org.jfree.data.time.TimeSeries; import org.jfree.data.time.TimeSeriesCollection; import org.jfree.data.xy.XYDataset; import org.jfree.ui.RectangleInsets; public class TestTimeSeriesChart { private static XYDataset createDataset() { TimeSeriesCollection dataset = new TimeSeriesCollection(); Day day = new Day(21, 9, 2008); Hour hour22 = new Hour(22, day); Hour hour23 = new Hour(23, day); TimeSeries timeSeries1 = new TimeSeries("籃球火", Minute.class); timeSeries1.add(new Minute(25, hour23), 2.80); timeSeries1.add(new Minute(22, hour23), 2.59); timeSeries1.add(new Minute(32, hour22), 2.38); timeSeries1.add(new Minute(14, hour22), 2.35); timeSeries1.add(new Minute(18, hour23), 2.34); timeSeries1.add(new Minute(57, hour23), 2.31); timeSeries1.add(new Minute(14, hour23), 2.28); timeSeries1.add(new Minute(23, hour22), 2.25); timeSeries1.add(new Minute(46, hour22), 2.16); timeSeries1.add(new Minute(40, hour22), 2.16); timeSeries1.add(new Minute(6, hour22), 1.95); timeSeries1.add(new Minute(51, hour22), 1.93); timeSeries1.add(new Minute(2, hour23), 1.86); timeSeries1.add(new Minute(6, hour23), 1.84); timeSeries1.add(new Minute(9, hour23), 1.79); timeSeries1.add(new Minute(29, hour23), 1.72); TimeSeries timeSeries2 = new TimeSeries("無敵珊寶妹", Minute.class); timeSeries2.add(new Minute(36, hour22), 3.63); timeSeries2.add(new Minute(55, hour22), 3.63); timeSeries2.add(new Minute(21, hour23), 3.36); timeSeries2.add(new Minute(30, hour22), 3.28); timeSeries2.add(new Minute(33, hour23), 3.18); timeSeries2.add(new Minute(6, hour23), 3.13); timeSeries2.add(new Minute(13, hour22), 3.05); timeSeries2.add(new Minute(0, hour23), 2.98); timeSeries2.add(new Minute(40, hour22), 2.98); timeSeries2.add(new Minute(48, hour22), 2.91); timeSeries2.add(new Minute(14, hour23), 2.73); timeSeries2.add(new Minute(27, hour23), 2.59); timeSeries2.add(new Minute(38, hour23), 2.37); TimeSeries timeSeries3 = new TimeSeries("不良笑花", Minute.class); timeSeries3.add(new Minute(8, hour23), 2.84); timeSeries3.add(new Minute(29, hour22), 2.51); timeSeries3.add(new Minute(56, hour22), 2.23); timeSeries3.add(new Minute(5, hour23), 2.17); timeSeries3.add(new Minute(47, hour22), 2.10); timeSeries3.add(new Minute(17, hour22), 1.86); timeSeries3.add(new Minute(24, hour23), 1.84); timeSeries3.add(new Minute(5, hour22), 1.84); timeSeries3.add(new Minute(15, hour23), 1.73); timeSeries3.add(new Minute(36, hour22), 1.46); dataset.addSeries(timeSeries1); dataset.addSeries(timeSeries2); dataset.addSeries(timeSeries3); return dataset; } public static void createTimeSeriesChart() { JFreeChart timeSeriesChart = ChartFactory.createTimeSeriesChart( "臺灣偶像劇收視率(2008-9-21)", "播放時間", "收視率百分點", createDataset(), true, true, false); timeSeriesChart.setBackgroundPaint(Color.YELLOW); XYPlot plot = timeSeriesChart.getXYPlot(); setXYPolt(plot); ChartFrame frame = new ChartFrame("TestPieChart", timeSeriesChart); frame.pack(); frame.setVisible(true); } public static void setXYPolt(XYPlot plot) { plot.setDomainGridlinePaint(Color.LIGHT_GRAY); plot.setRangeGridlinePaint(Color.LIGHT_GRAY); // plot.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0)); XYItemRenderer r = plot.getRenderer(); if (r instanceof XYLineAndShapeRenderer) { XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) r; renderer.setBaseShapesVisible(true); renderer.setBaseShapesFilled(false); } } public static void main(String[] args) { createTimeSeriesChart(); } }
效果圖
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!