JFreeChart - Biểu đồ TimeSeries

Biểu đồ chuỗi thời gian hiển thị chuỗi các điểm dữ liệu, thay đổi theo các khoảng thời gian bằng nhau. Chương này giải thích - cách chúng ta có thể sử dụng JFreeChart để tạoTime Series Chart từ một tập hợp dữ liệu kinh doanh nhất định.

Dữ liệu kinh doanh

Hãy để chúng tôi xem xét các số ngẫu nhiên khác nhau được tạo bằng cách sử dụng API Java tiêu chuẩn Math.random(). Chúng tôi sử dụng những con số này để tạo Biểu đồ chuỗi thời gian. Bạn có thể tạo biểu đồ tương tự cho tổng số lỗi xảy ra trong trang web của mình tại một khoảng thời gian nhất định.

Ứng dụng dựa trên AWT

Sau đây là mã để tạo Biểu đồ chuỗi thời gian từ các số được tạo bởi Math.random() tại một thời điểm nhất định nội bộ.

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

Hãy để chúng tôi giữ mã Java ở trên TimeSeries_AWT.java tệp, sau đó biên dịch và chạy nó từ lệnh được nhắc là -

$javac TimeSeries_AWT.java  
$java TImeSeries_AWT

Nếu mọi thứ đều ổn, nó sẽ biên dịch và chạy để tạo Biểu đồ chuỗi thời gian sau:

Tạo hình ảnh JPEG

Chúng ta hãy viết lại ví dụ trên để tạo ảnh JPEG từ một dòng lệnh.

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

Hãy để chúng tôi giữ mã Java ở trên TimeSeriesChart.java tệp, sau đó biên dịch và chạy nó từ lệnh được nhắc là -

$javac TimeSeriesChart.java  
$java TimeSeriesChart

Nếu mọi thứ đều ổn với môi trường của bạn, nó sẽ biên dịch và chạy để tạo tệp ảnh JPEG TimeChart.jpeg tệp trong thư mục hiện tại của bạn.