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
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
}
}
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.
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
RispondiEliminaGrazie a te per essere passata!
Elimina