JFreeChart - Grafico TimeSeries

Un grafico delle serie temporali mostra una sequenza di punti dati, che varia a intervalli di tempo uguali. Questo capitolo mostra come possiamo usare JFreeChart per creareTime Series Chart da un determinato insieme di dati aziendali.

Dati aziendali

Consideriamo vari numeri casuali generati utilizzando l'API Java standard Math.random(). Usiamo questi numeri per generare un grafico delle serie storiche. Puoi generare un grafico simile per il numero totale di errori che si verificano nel tuo sito web in un dato intervallo di tempo.

Applicazione basata su AWT

Di seguito è riportato il codice per creare un grafico delle serie temporali dai numeri generati da Math.random() in un dato momento interno.

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

Manteniamo il codice Java sopra in formato TimeSeries_AWT.java file, quindi compilarlo ed eseguirlo dal comando richiesto come -

$javac TimeSeries_AWT.java  
$java TImeSeries_AWT

Se tutto va bene, verrà compilato ed eseguito per generare il seguente grafico delle serie temporali:

Creazione di immagini JPEG

Riscriviamo l'esempio precedente per generare un'immagine JPEG da una riga di comando.

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

Manteniamo il codice Java sopra in formato TimeSeriesChart.java file, quindi compilarlo ed eseguirlo dal comando richiesto come -

$javac TimeSeriesChart.java  
$java TimeSeriesChart

Se tutto va bene con il tuo ambiente, verrà compilato ed eseguito per creare un file immagine JPEG TimeChart.jpeg file nella directory corrente.