In molte applicazioni, standalone o Web, si riscontra il problema della visualizzazione grafica di dati per mezzo di diagrammi.
JFreeChart è una libreria Open Source che viene utilizzata per generare una gran varietà di grafici.
Tramite JFreeChart si possono creare grafici bidimensionali e tridimensionali, bar charts (orizzontali e verticali), serie temporali, istogrammi, grafici di Gantt e a torta
Grafici
Di seguito sono presenti alcuni tipi di grafici che si possono realizzare.
Per i Digrammi a Torta si utilizza la PieDataSet:
Per il grafico a barre, grafico lineare e waterfall, l'interfaccia è CategoryDataSet:
Per gli Istogrammi la IntervalXYDataset:
Per i Diagramma Gantt la IntervalCategoryDataset:
Inoltre è possibile realizzare grafici tridimensionali. L'esportazione dei grafici generati si può effettuare nei formati JPEG e PNG. I grafici, di tipo diverso, si possono combinare, ecco un esempio lineare con un'istogramma:
Installazione e Applicazione
Per prima cosa scaricarichiamo la libreria JFreeChart.
Notiamo subito che la JfreeChart necessita anche della libreria JCommon scaricabile dallo stesso sito.
Per creare un qualunque tipo di grafico, tramite JFreeChart, bisogna seguire i seguenti passi:
- Creazione di un DataSet
- Creazione di un oggetto JFreeChart
- Impostazione degli attributi del diagramma
- Rendering del grafico
- Definizione degli assi
Creazione di un DataSet
La creazione di un DataSet avviene attraverso le classi messe a disposizione dal package org.jfree.data
Tale passaggio ci consente di creare un DataSet di dati per la visualizzazione di quest'ultimi sotto forma di grafici.
La natura dei dati può essere statica (impostata di default al momento della creazione del codice) o dinamica ( attraverso dati provenienti da database o da query).
Per usare una serie di dati statici, bisogna istanziare un oggetto della classe TimeSeries
e utilizzare il metodo add()
. Il TimeSeries
va aggiunto al metodo add
della classe TimeSeriesCollection
.
Listato 1. Crea un istanza con dati statici
TimeSeries time = new TimeSeries( "prova", Month.class ); //inizializza l'oggetto della classe TimeSeries
time.add( new Month( 1, 2007 ), 45.0 ); //inserisce i parametri definendo il periodo (nel nostro caso una data) e il valore
time.add( new Month( 2, 2007), 67.3 );
TimeSeriesCollection timeCollection = new TimeSeriesCollection(); //istanzia il TimeSeriesCollection
timeCollection.addSeries(time); //inserisce il timeSeries
Se invece i dati provengono da un dataBase o da una query, bisogna sempre istanziare un oggetto appartenente alla classe TimeSeries
e alla TimeSeriesCollection
, ma occorre collegarsi al database.
Per ovviare a questo problema, si crea un oggetto della classe DataRetriever
, che si collega al database in questione ed esegue la query.
Il risultato di quest'ultimo viene passato al TimeSeriesCollection
.
Listato 2. Crea un istanza con dati dinamici
TimeSeriesCollection dataCollection = new TimeSeriesCollection();
TimeSeries time = new TimeSeries( "prova", Month.class );
DataRetriever dataRetriever = new DataRetriever(); //crea un'istanza del DataRetriever e interroga la Tabella
dataCollection = dataRetriever.getData( "SELECT * FROM TabellaProva" );
Creazione di un oggetto JFreeChart
La creazione di un oggetto JFreeChart avviene tramite uno dei tanti metodi della classe org.jfree.chart.ChartFactory.
Tale classe mette a disposizione una collezione di metodi (i quali ritornano tutti un oggetto di tipo JFreeChart) che consentono la generazione dei grafici standard. Esempio:
- createBarChart(
java.lang.String title, java.lang.String categoryAxisLabel, java.lang.String valueAxisLabel, CategoryDataset dataset, PlotOrientation orientation, boolean legend, boolean tooltips, boolean urls
) Ritorna come valore un oggetto JFreeChart e consente di creare un diagramma a barre. - createGanttChart(
java.lang.String title, java.lang.String categoryAxisLabel, java.lang.String dateAxisLabel, IntervalCategoryDataset dataset, boolean legend, boolean tooltips, boolean urls
) Crea un diagramma di Gantt e ritorna sempre un oggetto di tipo JFreeChart. - createHistogram(
java.lang.String title, java.lang.String xAxisLabel, java.lang.String yAxisLabel, IntervalXYDataset dataset, PlotOrientation orientation, boolean legend, boolean tooltips, boolean urls
) Crea un Istogramma. - createLineChart(
java.lang.String title, java.lang.String categoryAxisLabel, java.lang.String valueAxisLabel, CategoryDataset dataset, PlotOrientation orientation, boolean legend, boolean tooltips, boolean urls
) crea un diagramma lineare.
Impostazione degli attributi
Per impostare gli attributi del diagramma si usa una delle classi plot del package org.jfree.chart.plot
, tra cui: ColorPalette
, GreyPalette
, CombineRangeXYPlot
, PiePlot
, PiePlot3D
Rendering e definizione degli assi
Per fare il rendering del grafico si usano le classi del package org.jfree.chart.renderer
Invece, per definire gli assi (x, y, ed eventualmente z) si usano le classi del package org.jfree.chart.axis
.
Utility per la realizzazione
La libreria mette a disposizione una serie di classi (tutte appartenenti al package org.jfree.chart) che offrono una serie di utility per la realizzazione dei diagrammi:
- ChartColor: estende il numero di colori utilizzabili.
- ChartFrame: un frame per la visualizzazione del diagramma.
- ChartMouseEvent: un insieme di metodi per la visualizzazione dei dati al passaggio del mouse sul display.
- ChartUtility:un insieme di metodi per il salvataggio e l'export del grafico generato nei vari formati disponibili.
- HashUtilities: metodi per il calcolo dell'hash codes.
- PolarChartPanel: metodi per la gestione di menu e di popUp Menù.