Gráficos con JfreeChart 1.0.6

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:

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

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.

Anuncios

4 comentarios en “Gráficos con JfreeChart 1.0.6

  1. Hola tengo un pequeño problema, tengo un reporte hecho en ireport con un grafico y me funciona perfecto, pero a la hora de ejecutarlo desde netbeans me da el siguiente error:

    Exception in thread “AWT-EventQueue-0” java.lang.NoSuchFieldError: DEFAULT_GRID_BAND_ALTERNATE_PAINT
    at org.jfree.chart.StandardChartTheme.(StandardChartTheme.java:222)
    at org.jfree.chart.StandardChartTheme$1.(StandardChartTheme.java:281)
    at org.jfree.chart.StandardChartTheme.createLegacyTheme(StandardChartTheme.java:281)
    at net.sf.jasperreports.engine.fill.DefaultChartTheme.createBar3DChart(DefaultChartTheme.java:583)
    at net.sf.jasperreports.engine.fill.DefaultChartTheme.createChart(DefaultChartTheme.java:247)
    at net.sf.jasperreports.engine.fill.JRFillChart.evaluateChart(JRFillChart.java:1285)
    at net.sf.jasperreports.engine.fill.JRFillChart.evaluateRenderer(JRFillChart.java:1252)
    at net.sf.jasperreports.engine.fill.JRFillChart.evaluate(JRFillChart.java:1241)
    at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:260)
    at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:486)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillSummaryNewPage(JRVerticalFiller.java:1164)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillSummary(JRVerticalFiller.java:906)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportEnd(JRVerticalFiller.java:287)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:121)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:911)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:814)
    at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:63)
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:421)

    La verdad ya no se que probar para que funcione, agradeceria cualquier ayuda ya que es para mi tesis, gracias

  2. I was getting the same error. In the folder where your JAR files are check that you don’t have older versions of jfreechart JAR files. I had three versions from previous installations of ireport. When I removed the oldest two and just left jfreechart-1.0.12 the error went away.

  3. Gracias por el ejemplo xD

    Queria ver si me podes ayudar con algo, fijate que he estado intentando cambiar el rango en Y de mi grafico, pero no he podido.

    Tengo una grafica de control cuyos datos varían en decimales, 1400.01, 1400.015 (por ejemplo), pero por el hecho de ser muy pequeñas las variaciones no se nota el cambio, solo se ve una linea recta. Queria saber como puedo acotar el area que se despliega en mi grafico, por ejemplo de 1399 a 1401 (actualmente está desde 0 hasta 1400+).

    Estoy usando esto:
    XYSeriesCollection dataset = new XYSeriesCollection();

    JFreeChart chart = ChartFactory.createXYLineChart(…


    Gracias

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s