jfreechart动态时序图

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29726359/article/details/79343599

本篇文章只会涉及到接下来项目所需的知识

  • 关于jfreechart
  • 关于动态时序图
  • 动态时序图一些常用属性

关于jfreechart

  • 有这样一个情况,当开发一个应用程序,需要以图形的形式来静态或者动态来显示数据,其中数据本身是动态填充。那么在这种情况下,jfreechart刚好满足这种应用场景。JfreeChart是用Java开发的开源库,它可以在基于Java的应用程序可用于创建各种各样的图表。通过使用JFreeChart,可以创建2D和3D图表,如饼图,条形图,折线图,XY图和3D图表所有常用的主要类型。 它是100%开源和免费的,允许使用在商业应用中无需任何费用。它配备了有据可查的API,这使得它很容易理解。它支持多种图表类型,如饼图,折线图,条形图,面积图和三维图表。JFreeChart易于扩展,并且可以在客户端以及服务器端应用程序中被使用。它支持多种输出格式,如PNG,JPEG,PDF,SVG等。它允许图表丰富的自定义。

关于动态时序图

  • 即数据可以实时添加,动态显示。

动态时序图一些常用属性

  • 生成时序图:
 JFreeChart jfreechart = ChartFactory.createTimeSeriesChart( 
                 String title,    // 图标题 
                 String timeAxisLabel,   //x 轴标题 
                 String valueAxisLabel,  //y 轴标题 
                 XYDataset dataset,       // 数据源 
                 boolean legend,          // 是否显示图例 
                 boolean tooltips,        // 是否显示提示
                 boolean urls);           // 是否指定连接
 //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);  
//删除数据操作:   
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 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, 2, 2018);
		Hour hour22 = new Hour(16, day);
		Hour hour23 = new Hour(27, day);

		TimeSeries timeSeries1 = new TimeSeries("字段一", Minute.class);
		timeSeries1.add(new Minute(25, hour23), 3.80);
		timeSeries1.add(new Minute(22, hour23), 3.59);
		timeSeries1.add(new Minute(32, hour22), 2.38);
		timeSeries1.add(new Minute(14, hour22), 3.35);
		timeSeries1.add(new Minute(18, hour23), 2.34);
		timeSeries1.add(new Minute(57, hour23), 3.31);
		timeSeries1.add(new Minute(14, hour23), 2.29);
		timeSeries1.add(new Minute(23, hour22), 2.25);
		timeSeries1.add(new Minute(46, hour22), 3.16);
		timeSeries1.add(new Minute(40, hour22), 2.16);
		timeSeries1.add(new Minute(6, hour22), 2.95);
		timeSeries1.add(new Minute(51, hour22), 1.93);
		timeSeries1.add(new Minute(2, hour23), 2.86);
		timeSeries1.add(new Minute(6, hour23), 2.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(
				"动态时序图", "横坐标", "纵坐标", createDataset(), true,
				true, false);
		timeSeriesChart.setBackgroundPaint(Color.white);
		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);
		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();
	}

}

运行后:

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_29726359/article/details/79343599