JFreeChart: Facil creación de gráficos estadísticos en Java

27/06/2009 at 2:22 pm | In Informatica, Java | Leave a Comment
Tags: , ,

JFreeChart es una librería para gráficos escrita 100% en Java que facilita mostrar gráficos de calidad profesional en nuestras aplicacion, ya sean web o de escritorio. Entre las características principales de esta biblioteca tenemos:

- Un API consistente y bien documentado con soporte para un amplio rango de tipos de gráficas.

- Un diseño flexible fácilmente extendible, y la posibilidad de ser usado tanto en tecnologías de servidor (aplicaciones Web) y de cliente (Swing, por ejemplo).

- Soporte para varios tipos de salida, incluyendo componentes Swing, archivos de imagen como PNG y JPEG, y formatos gráficos de vectores (incluyendo PDF, EPS y SVG).

- JFreeChart es open source, más especificamente, Software Libre, éste está distribuido bajo la licencia LGPL, que permite el uso en aplicaciones propietarias.

Adaptación al español de: http://www.jfree.org/jfreechart/
Ahora que ya tenemos una idea de lo que JFreeChart es, veamos un ejemplo. Primero creamos un Servlet.

ServletLine.java


package com.imageneureka.tests;

import java.awt.Color;
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
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;

public class ServletLine extends HttpServlet {

 private XYDataset generaDatos() {

 XYSeries serie1 = new XYSeries("Serie 1");
 serie1.add(1D, 2D);
 serie1.add(2D, 4D);
 serie1.add(3D, 2D);
 serie1.add(4D, 5D);
 serie1.add(5D, 5D);
 serie1.add(6D, 7D);
 serie1.add(7D, 7D);
 serie1.add(8D, 8D);

 XYSeries serie2 = new XYSeries("Serie 2");
 serie2.add(1D, 5D);
 serie2.add(2D, 7D);
 serie2.add(3D, 6D);
 serie2.add(4D, 8D);
 serie2.add(5D, 4D);
 serie2.add(6D, 4D);
 serie2.add(7D, 2D);
 serie2.add(8D, 2D);

 XYSeries serie3 = new XYSeries("Serie 3");
 serie3.add(2D, 5D);
 serie3.add(4D, 3D);
 serie3.add(5D, 1D);
 serie3.add(6D, 3D);
 serie3.add(7D, 6D);
 serie3.add(8D, 3D);
 serie3.add(9D, 4D);

 XYSeriesCollection xyseriescollection =
 new XYSeriesCollection();
 xyseriescollection.addSeries(serie1);
 xyseriescollection.addSeries(serie2);
 xyseriescollection.addSeries(serie3);

 return xyseriescollection;
 }

 private static JFreeChart generaGrafico(XYDataset xydataset) {
 JFreeChart jfreechart = ChartFactory.createXYLineChart(
 "Lineal", "X", "Y",
 xydataset, PlotOrientation.VERTICAL,
 true, true, false);

 XYPlot xyplot = (XYPlot) jfreechart.getPlot();
 xyplot.setBackgroundPaint(Color.white);
 xyplot.setDomainGridlinePaint(Color.gray);
 xyplot.setRangeGridlinePaint(Color.gray);
 XYLineAndShapeRenderer xylineandshaperenderer =
 (XYLineAndShapeRenderer) xyplot.getRenderer();
 xylineandshaperenderer.setBaseShapesVisible(true);

 return jfreechart;
 }

 protected void processRequest(HttpServletRequest
 request, HttpServletResponse response)
 throws ServletException, IOException {

 response.setContentType("image/jpeg");
 OutputStream out = response.getOutputStream();

 XYDataset xydataset = generaDatos();
 JFreeChart grafico = generaGrafico(xydataset);
 ChartUtilities.writeChartAsJPEG(out, grafico, 400, 300);

 out.close();
 }

 // <editor-fold defaultstate="collapsed" desc="métodos doGet y doPost creados por NetBeans">
 /**
 * Handles the HTTP <code>GET</code> method.
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
 @Override
 protected void doGet(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException {
 processRequest(request, response);
 }

 /**
 * Handles the HTTP <code>POST</code> method.
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
 @Override
 protected void doPost(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException {
 processRequest(request, response);
 }

 /**
 * Returns a short description of the servlet.
 * @return a String containing servlet description
 */
 @Override
 public String getServletInfo() {
 return "Short description";
 }// </editor-fold>
}

Como se habrá dado cuenta más de uno, este Servlet fue creado por Netbeans, basta con crear un nuevo proyecto:

Nuevo Proyecto web con Netbeans

Nuevo Proyecto web con Netbeans

Y después crear un Servlet dentro de él:

Creando un Servlet con Netbeans

Creando un Servlet con Netbeans

El asistente de Netbeans nos asistirá en el proceso de crear los mapping en el archivo web.xml, si no sabes que es un mapping en un entorno Servlet, sigue el link: soy el link

Ok, el nombre del mapping hacia el recurso por el momento lo dejamos igual, osea ServletLine, de tal forma que para llegar a este el navegador apunte a:

http://localhost:8080/MiProyecto/ServletLine

Ahora solo tenemos que crear un JSP para mostrar nuestro gráfico:

index.jsp


<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<html>
 <head>
 <meta http-equiv="Content-Type"
 content="text/html; charset=UTF-8">
 <title>Gráfico estadístico con JFreeChart</title>
 </head>
 <body>

 <img src="ServlettLine">

 </body>
</html></pre>

Observen que el src de la etiqueta img apunta hacia el Servlet que creamos, esto es debido a que éste Servlet devuelve la imagen gracias a ésta línea es nuestro Servlet:

 response.setContentType("image/jpeg");

Bueno, ahora solo nos falta correr el proyecto, si tenemos suerte, las librerías adecuadas instaladas, (asumo que han descargado e instalado las librerías de:
http://www.jfree.org/jfreechart/download.html
Pues deberíamos ver algo como ésto:

Gráfico Estadístico usando JFreeChart

Gráfico Estadístico usando JFreeChart

Aún no hay comentarios »

Canal RSS de los comentarios de la entrada. URI para TrackBack.

Deja un comentario

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Blog de WordPress.com. | Theme: Pool by Borja Fernandez.
Entries and comments feeds.