JFreeChart: statistiche e grafici in Java

DOMANDA:

Come si creano grafici e statistiche in Java?


RISPOSTA:

Uno dei possibili modi per creare velocemente statistiche e grafici in Java è utilizzando JFreeChart, una libreria che, con pochi sforzi, ci permette di ottenere dei buoni risultati.

Per far funzionare l'esempio abbiamo bisogno delle seguenti librerie:
- jfreechart-1.0.14.jar (scaricabile da qui)
- jcommon-1.0.17.jar (scaricabile da qui)
(le versioni indicate sono quelle utilizzate nell'esempio)

Qualora non importassimo le librerie JCommon incorreremo nel seguente errore:

The type org.jfree.util.PublicCloneable cannot be resolved. 
       It is indirectly referenced from required .class files


Guardiamo ora come, in un unico esempio di Test, riusciamo a stampare tre file (istogramma.jpg, torta1.png, torta2.png): 

package statistiche;

import java.io.File;
import java.io.IOException;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.util.Rotation;

public class TestStatistiche {
   public static void main(String[] args) throws IOException {

     // tre valori riempiti staticamente
     int value1 = 12;
     int value2 = 20;
     int value3 = 40;

     // istrogramma a barre verticali/orizzontali
     DefaultCategoryDataset cdata = new DefaultCategoryDataset();
     cdata.setValue(value1, "value1: " +value1, "colonna1");
     cdata.setValue(value2, "value2: " +value2, "colonna2");
     cdata.setValue(value3, "value3: " +value3, "colonna3");

     // PlotOrientation.VERTICAL per cambiare l'orientamento delle barre
     JFreeChart chart = ChartFactory.createBarChart("value1", "value2", "value3", cdata, PlotOrientation.HORIZONTAL, true, true, true);

     ChartUtilities.saveChartAsJPEG(new File("C:\\istogramma.jpg"), chart, 400, 450); // larghezza 400; altezza 450


     // diagramma torta 3d
     DefaultPieDataset data = new DefaultPieDataset();
     data.setValue("value1: " +value1, value1);
     data.setValue("value2: " +value2, value2);
     data.setValue("value3: " +value3, value3);

     JFreeChart chart2 = ChartFactory.createPieChart3D("Statistiche", data, true, true, true);

     ChartUtilities.saveChartAsPNG(new File("C:\\torta1.png"), chart2, 400, 450); // larghezza 400; altezza 450


     // applichiamo effetti grafici al diagramma torta 3d
     PiePlot plot = (PiePlot) chart2.getPlot();
     plot.setStartAngle(290);
     plot.setDirection(Rotation.CLOCKWISE);
     plot.setForegroundAlpha(0.5f);

     ChartUtilities.saveChartAsPNG(new File("C:\\torta2.png"), chart2, 400, 450); // larghezza 400; altezza 450
   }
}

Controllando nella cartella C:\, scelta come destinazione dei nostri file, troveremo le tre immagini rappresentanti i rispettivi diagrammi.


Sia ben chiaro che la scelta dell'output (nel nostro caso dei semplici File) è facilmente modificabile con qualunque altro OutputStream o PrintWriter (come ad esempio un ServletOutputStream in una Web Application che utilizza le Servlet).


Per gli ulteriori approfondimenti e la creazione di altre tipologie di grafici vi rimando al sito ufficiale JFree.org.


Commenti

  1. Davvero interessante, ho risolto velocemente un problema con il mio programma (non sapevo come creare immagini di grafici da integrare in alcuni pdf senza ammattirmi). Quindi grazie mille per l'ottimo spunto

    RispondiElimina

Posta un commento

Post popolari in questo blog

Arrotondamento e troncamento in Java

Eclipse: Shortcuts (scorciatoie) da tastiera

Strutture dati: List, Set, Map

Creare un eseguibile Java