Bueno la idea de publicar este post es brindar un apoyo a quienes intentan crear gráficos estadísticos en java partiendo de una versión anterior del jfreechart, como saben hay muy poca documentación en la red acerca de ejemplos o como ha ido cambiando esta librería(es decir gratis), además la guia de desarrollo es pagada.
La url es:
http://www.jfree.org
No intento perjudicar a los desarrolladores de jfreechart sino que voy a mostrar algunos cambios y pequeños ejemplos para que le sirvan a alguien mas, sobre el uso de esta librería que esta muy buena al momento de diseñar nuestros gráficos, cabe indicar que no he adquirido la guia de desarrollo pero si me he tomado un tiempo en tratar de entenderla y hacerla funcionar además al momento de bajar el paquete hay unos ejemplos que vienen con él.
Bueno basta de palabrería:
como podemos observar en la tabla anterior lo que se ha modificado en algunos casos es el nombre y en otros solo tenemos que se ha modificado un paquete adicional como es el "xy" ahí podremos encontrar todas las clases que empiecen con XY por ejemplo: XYItemRenderer
Ejemplo:
/* -------------------
* LineChart.java
* -------------------
* (C) Copyright 2002-2005, by Object Refinery Limited.
*
*/
import java.awt.Color;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RectangleInsets;
import org.jfree.ui.RefineryUtilities;
import org.jfree.chart.axis.Axis;
import org.jfree.chart.labels.StandardXYItemLabelGenerator;
import org.jfree.chart.labels.XYItemLabelGenerator;
/**
* Una simple programa para demostrar como funciona la creacion de un linechar desde un XYDataset
* {@link XYDataset}.
* <p>
* IMPORTANT NOTE: THIS DEMO IS DOCUMENTED IN THE JFREECHART DEVELOPER GUIDE.
* DO NOT MAKE CHANGES WITHOUT UPDATING THE GUIDE ALSO!!
*
* NOTA: ESTA DEMOSTRACIÓN ESTA DOCUMENTADA EN AL GUIA DE DESARROLLO JFREECHART
* NO HAGAS CAMBIOS SIN ACTUALIZAR LA GUIA TAMBIÉN !!
*/
public class LineChart extends ApplicationFrame {
/**
* Crear un nuevo demo
*
* @param title Titulo del frame
*/
public LineChart(String title) {
super(title);
XYDataset dataset = createDataset();
JFreeChart chart = createChart(dataset);
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
setContentPane(chartPanel);
}
/**
* Creando un conjunto de datos de ejemplo
*
* @return ejemplo de un conjunto de datos
*/
private static XYDataset createDataset() {
XYSeries series1 = new XYSeries("Primero");
series1.add(1.0, 1.0);
series1.add(2.0, 4.0);
series1.add(3.0, 3.0);
series1.add(4.0, 5.0);
series1.add(5.0, 5.0);
series1.add(6.0, 7.0);
series1.add(7.0, 7.0);
series1.add(8.0, 8.0);
XYSeries series2 = new XYSeries("Segundo");
series2.add(1.0, 5.0);
series2.add(2.0, 7.0);
series2.add(3.0, 6.0);
series2.add(4.0, 8.0);
series2.add(5.0, 4.0);
series2.add(6.0, 4.0);
series2.add(7.0, 2.0);
series2.add(8.0, 1.0);
XYSeries series3 = new XYSeries("Tercero");
series3.add(3.0, 4.0);
series3.add(4.0, 3.0);
series3.add(5.0, 2.0);
series3.add(6.0, 3.0);
series3.add(7.0, 6.0);
series3.add(8.0, 3.0);
series3.add(9.0, 4.0);
series3.add(10.0, 3.0);
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series1);
dataset.addSeries(series2);
dataset.addSeries(series3);
return dataset;
}
/**
* Creando el grafico
*
* @param dataset datos para el grafico
*
* @return un grafico
*/
private static JFreeChart createChart(XYDataset dataset) {
// create the chart...
JFreeChart chart = ChartFactory.createXYLineChart(
"Line Chart", // Titulo de grafico
"X", // Etiqueta del eje x
"Y", // Etiqueta del eje y
dataset, // data
PlotOrientation.VERTICAL,
true, // incluye leyenda
true, // visualiza tooltips
false // urls
);
// AHORA PERSONALIZAMOS(le damos pinta) ALGO EL GRAFICO...
chart.setBackgroundPaint(Color.white);
// consigue una referencia para el plot en futuras personalizaciones...
XYPlot plot = (XYPlot) chart.getPlot();
plot.setBackgroundPaint(Color.lightGray);
plot.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0));
plot.setDomainGridlinePaint(Color.white);
plot.setRangeGridlinePaint(Color.white);
// Permite visualizar las coordenadas trazando ejes
plot.setDomainCrosshairVisible(true);
plot.setRangeCrosshairVisible(true);
XYLineAndShapeRenderer renderer
= (XYLineAndShapeRenderer) plot.getRenderer();
XYItemLabelGenerator xy = new StandardXYItemLabelGenerator();
renderer.setBaseItemLabelGenerator(xy);
renderer.setShapesVisible(true);
renderer.setShapesFilled(true);
//renderer.setBaseItemLabelVisible(true);
renderer.setBaseLinesVisible(true);
renderer.setBaseItemLabelsVisible(true);
// Cambiando la unidad de seleccion auto tickchange a enteros solamente...
NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
// PERSONALIZACION OPCIONAL COMPLETA.
//Axis axis = plot.getDomainAxis();
//axis.setTickMarksVisible(true);
return chart;
}
/**
* Crea un panel para la demostracion (Usado por SuperDemo.java).
*
* @return un Panel.
*/
public static JPanel createDemoPanel() {
JFreeChart chart = createChart(createDataset());
return new ChartPanel(chart);
}
/**
* Inicia la demostracion de la aplicacion
*
* @param args ignorado.
*/
public static void main(String[] args) {
LineChart demo = new LineChart("Line Chart con XYDataset");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}
}
En lo posterior seguiré incluyendo mas información sobre el uso de esta librería.
Saludos.
jfreechart 1.0.4 | jfreechart 1.0.6 |
org.jfree.data.renderer.StandardXYItemRenderer | org.jfree.data.renderer.xy.XYLineAndShapeRenderer |
org.jfree.data.XYDataset | org.jfree.data.xy.XYDataset |
org.jfree.data.AbstractSeriesDataset | org.jfree.data.general.AbstractSeriesDataset |
org.jfree.data.DatasetChangeEvent | org.jfree.data.general.DatasetChangeEvent |
import org.jfree.data.DefaultMeterDataset | org.jfree.data.general.DefaultValueDataset |
Secciones
Tags
Hola, me ha gustado los
Hola tengo un pequeño
I was getting the same error.
Gracias por el ejemplo