Gráficos con JfreeChart 1.0.6
by drw on Jue, 04/17/2008 - 23:03
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 |
+
- drw's blog
- Añadir nuevo comentario
- 11 lecturas
Acerca del Blog
Las opiniones y criterios dentro de este blog son de exclusiva responsabilidad de Darwin Betancourt y no representan el pensamiento de ninguna institución en la cual trabajo.
Envíos recientes a blogs
- Optimizar Drupal con Boost
- Joomla vs Drupal: bugs y exploits
- Examinador de imágenes en FCKeditor
- Obama y el Open Source
- Tips para el mejor uso de Debian backports
- Joomla vs Drupal: modelo de negocios
- Actualizar FCKeditor personalizado
- Relacionar Contenido con FCKeditor
- Fortaleza en momentos de debilidad
- Treo 650 e Internet GPRS
Gracias por el ejemplo
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
I was getting the same error.
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.
Hola tengo un pequeño
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
Hola, me ha gustado los
Hola,
me ha gustado los ejemplos que has puesto. Podrías mandarme algun tutorial o algo?