JFreeChart TimeSeries图表


时间序列图显示数据点的序列,这些数据点在相同的时间间隔内变化。本章演示 - 我们如何使用JFreeChart 从一组给定的业务数据创建 时间序列图表

业务数据

让我们考虑使用标准Java API Math.random() 生成的各种随机数。我们使用这些数字来生成时间序列图。您可以在给定的时间间隔内为您网站上发生的错误总数生成类似的图表。

基于AWT的应用程序

以下是从内部给定时间由 Math.random() 生成的数字创建时间序列图的代码。

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.SeriesException;
import org.jfree.data.time.Second;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

public class TimeSeries_AWT extends ApplicationFrame {

   public TimeSeries_AWT( final String title ) {
      super( title );         
      final XYDataset dataset = createDataset( );         
      final JFreeChart chart = createChart( dataset );         
      final ChartPanel chartPanel = new ChartPanel( chart );         
      chartPanel.setPreferredSize( new java.awt.Dimension( 560 , 370 ) );         
      chartPanel.setMouseZoomable( true , false );         
      setContentPane( chartPanel );
   }

   private XYDataset createDataset( ) {
      final TimeSeries series = new TimeSeries( "Random Data" );         
      Second current = new Second( );         
      double value = 100.0;         

      for (int i = 0; i < 4000; i++) {

         try {
            value = value + Math.random( ) - 0.5;                 
            series.add(current, new Double( value ) );                 
            current = ( Second ) current.next( );
         } catch ( SeriesException e ) {
            System.err.println("Error adding to series");
         }
      }

      return new TimeSeriesCollection(series);
   }     

   private JFreeChart createChart( final XYDataset dataset ) {
      return ChartFactory.createTimeSeriesChart(             
         "Computing Test",
         "Seconds",              
         "Value",              
         dataset,             
         false,              
         false,              
         false);
   }

   public static void main( final String[ ] args ) {
      final String title = "Time Series Management";         
      final TimeSeries_AWT demo = new TimeSeries_AWT( title );         
      demo.pack( );         
      RefineryUtilities.positionFrameRandomly( demo );         
      demo.setVisible( true );
   }
}

让我们将上面的Java代码保存在 TimeSeries_AWT.java 文件中,然后从提示的命令中编译并运行它 -

$javac TimeSeries_AWT.java  
$java TImeSeries_AWT

如果一切正常,它将编译并运行以生成以下时间序列图 -

JFreeChart TimeSeries图表

JPEG图像创建

让我们重写上面的例子,从命令行生成一个JPEG图像。

import java.io.*;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.SeriesException;
import org.jfree.data.time.Second;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
import org.jfree.chart.ChartUtilities;

public class TimeSeriesChart {

   public static void main( final String[ ] args )throws Exception {
      final TimeSeries series = new TimeSeries( "Random Data" );
      Second current = new Second();
      double value = 100.0;

      for ( int i = 0 ; i < 4000 ; i++ ) {

         try {
            value = value + Math.random( ) - 0.5;
            series.add( current , new Double( value ) );
            current = ( Second ) current.next( );
         } catch ( SeriesException e ) {
            System.err.println( "Error adding to series" );
         }
      }

      final XYDataset dataset=( XYDataset )new TimeSeriesCollection(series);
      JFreeChart timechart = ChartFactory.createTimeSeriesChart(
         "Computing Test",
         "Seconds",
         "Value",
         dataset,
         false,
         false,
         false);

      int width = 560;   /* Width of the image */
      int height = 370;  /* Height of the image */
      File timeChart = new File( "TimeChart.jpeg" );
      ChartUtilities.saveChartAsJPEG( timeChart, timechart, width, height );
   }
}

让我们将上面的Java代码保存在 TimeSeriesChart.java 文件中,然后从提示的命令中编译并运行它 -

$javac TimeSeriesChart.java  
$java TimeSeriesChart

如果你的环境一切正常,它将编译并运行在当前目录中创建一个JPEG图像文件 TimeChart.jpeg 文件。