JfreeChart中的timeSeries(時序圖)使用示例

jopen 10年前發布 | 100K 次閱讀 JFreeChart 圖表/報表制作

生成時序圖:

       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();
    }

}

效果圖

b4ca9674-ece2-348f-8f63-87dbd7bde9a9.png

來自:http://sktoo.iteye.com/blog/249123

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!