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.
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
Y después crear un Servlet dentro de él:
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:
Hola eh checado tu ejemplo del servlet para cargar una imagen y no funciona lo copie y pegue tal cual lo tienes ahi, agregue las librerias pero no funciona ¿Cual puede ser mi problema?
y la imagen solo la carga de esta manera o que le debo de escribir dentro de
Hola, soy totalmente nuevo en el ambiente Java, y tengo un error que me aparece en el momento de querer compilar el archivo fuente, el mensaje es: “class TestJFreeChartInsideJFrame is public, should be declared in a file named TestJFreeChartInsideJFrame.java
public class TestJFreeChartInsideJFrame extends javax.swing.JFrame {“, quisiera saber si pueden orientarme a resolver este detalle, las librerias ya estan agregadas, incluso compile otro ejemplo sencillo y no dio problema, solo tengo ese unico detalle en mi archivo fuente. Gracias por su atención y ayuda. El ejemplo que quiero compilar es el que muestran aqui en esta pagina, pero no el de servlet, sino el swing. Gracias!!!
Hola Angel, en Java un archivo puede contener varias clases en la forma:
——————-
class A {
}
public class B {
}
class C{
}
————
todas ellas dentro del mismo archivo pero solo una de ellas puede tener el modificador public, en este caso es B, entonces el archivo debe llamarse “B.java”
Yo te sugeriría que si recién comienzas en Java, descargues el netbeans y pruebes tu código desde ahí, el asistente de corrección de errores es simplemente excelente y el autocompletado del Netbeans también te facilitará mucho familiarizarte con el API y los métodos de uso más común. un saludo.
me pueden ayudar a graficar unos datos que me envia un circuito por el puerto USB, no se como adicionarlos a la serie (series.add). mi email es diego5817@gmail.com
Hola!
muy bueno el tutorial, ayuda bastante para los principiantes.
Solo una pregunta, para que jfreechart funcione en una aplicación cliente-servidor necesariamente tiene que ser implementada con swing?
O hay métodos de la librería que son suficientes?
probe el codigo y no me genera la img.. esta = el codigo mostrado aqui…. cuando lo compilo solo me sale una ‘X’ roja de que no se muestra la imagen a que creen que se deba, gracias por la ayuda
Accede directamente a la URL de la imagen, para esto en firefox puedes hacer algo como clic derecho sobre la imagen (la X) y luego “Ver imagen”, ahí podrás ver más detalles del error, posiblemente solo la URL sea incorrecta o hayas olvidado registrar el Servlet
Muy bueno el ejemplo, me sirvio mucho gracias. Para comentar a las personas que no les genere la imagen y usan el ide Netbeans, deben de borrar esta linea de codigo en el servlet: PrintWriter out = response.getWriter();
Ola creo una calse que me genera el grafico d una zona con sus valores y mi metodo que crea la grafica es este public BufferedImage crearGrafica() pero bufferedImage marca que solo me retorna una imagen cierto? si me equivoco corrijanme porfavor y yo kiero obtener una grafica por cada zona pero noce como le puedo hacer me pueden ayudar porfavor
Descomprime jfreechart-1.0.14.zip, luego en el proyecto de netbeans clic derecho en “Libraries” en la pestaña “Projects”, luego add “JAR/Folder…” y luego te vas hasta la carpeta “lib” del archivo zip que descomprimiste al inicio y ahi seleccionas todos los archivos JAR. Y Listo.
Ok Gracias, ya me salio pero aparte de agregar la lib. “jfreechart-1.0.14” tambien agregue la lib. “jcommon-1.0.16”, quiero pensar que tambien es nesario por que despues de agregarla y correr mi “.jsp” que hace referencia al “Servlet” ya me mostro la grafica…
Estas en lo cierto, realmente sï JCommon es una dependencia de JFreeChart, como lo indican los mismos desarrolladores de JFreeChart en http://www.jfree.org/jfreechart/download.html en un comentario anterior dije que agregaras todos los archivos JAR dentro de esa carpeta pero solo por dejar las cosas simples porque algunos no son necesarios para el fin de mostrar una gráfica como la del ejemplo.
De ante mano muchas gracias por tu aporte me ha servido de mucho, pero ahora lo que realmente necesito hacer es que los valores de la grafica los jale de mi base de datos PostgreSQL pero ya estoy en proceso… si tienes alguna idea sobre esto te agradeceria si no ya es suficiente con lo anterior.
Excelente trabajo, me ha quedado la gráfica lineal, sólo tengo una duda con respecto a si mi eje X es TIME, es decir, HH:mm:ss. Puesto que no encuentro alguna solución agradescería tu ayuda.
Struggling to get your car paid off? Are you mad
about the last deal you got? Perhaps you’re looking for an automobile now, and you’re not sure
what to do differently. You’re in the same boat with many other people. Keep reading to find out information regarding what to do next time you enter a dealership.
you are in point of fact a excellent webmaster. The site loading velocity is amazing.
It sort of feels that you are doing any unique trick.
Moreover, The contents are masterpiece. you have done a magnificent process on this subject!
Greate pieces. Keep writing such kind of info on
your blog. Im really impressed by your blog.
Hey there, You’ve done a great job. I’ll certainly digg it and personally recommend to
my friends. I’m sure they will be benefited from this web site.
Como puedo realizar este programa como una aplicación de escritorio y en que momento se elegí el color de las gráficas. Cualquier ayuda me sirve.
Aquí puedes ver los ejemplos que muestran JFreeChart corriendo dentro de swing: http://www.jfree.org/jfreechart/samples.html, le agregué un ejemplo en swing al artículo
Hola eh checado tu ejemplo del servlet para cargar una imagen y no funciona lo copie y pegue tal cual lo tienes ahi, agregue las librerias pero no funciona ¿Cual puede ser mi problema?
y la imagen solo la carga de esta manera o que le debo de escribir dentro de
Antes de poder correr el codigo que ves ahí debes descargar las librerías (JFreeChart) e incluirlas en el classpath
Hola, soy totalmente nuevo en el ambiente Java, y tengo un error que me aparece en el momento de querer compilar el archivo fuente, el mensaje es: “class TestJFreeChartInsideJFrame is public, should be declared in a file named TestJFreeChartInsideJFrame.java
public class TestJFreeChartInsideJFrame extends javax.swing.JFrame {“, quisiera saber si pueden orientarme a resolver este detalle, las librerias ya estan agregadas, incluso compile otro ejemplo sencillo y no dio problema, solo tengo ese unico detalle en mi archivo fuente. Gracias por su atención y ayuda. El ejemplo que quiero compilar es el que muestran aqui en esta pagina, pero no el de servlet, sino el swing. Gracias!!!
Hola Angel, en Java un archivo puede contener varias clases en la forma:
——————-
class A {
}
public class B {
}
class C{
}
————
todas ellas dentro del mismo archivo pero solo una de ellas puede tener el modificador public, en este caso es B, entonces el archivo debe llamarse “B.java”
Yo te sugeriría que si recién comienzas en Java, descargues el netbeans y pruebes tu código desde ahí, el asistente de corrección de errores es simplemente excelente y el autocompletado del Netbeans también te facilitará mucho familiarizarte con el API y los métodos de uso más común. un saludo.
me pueden ayudar a graficar unos datos que me envia un circuito por el puerto USB, no se como adicionarlos a la serie (series.add). mi email es diego5817@gmail.com
Hola!
muy bueno el tutorial, ayuda bastante para los principiantes.
Solo una pregunta, para que jfreechart funcione en una aplicación cliente-servidor necesariamente tiene que ser implementada con swing?
O hay métodos de la librería que son suficientes?
Gracias
muy buen tuto, todos los ejemp funcionan ok
probe el codigo y no me genera la img.. esta = el codigo mostrado aqui…. cuando lo compilo solo me sale una ‘X’ roja de que no se muestra la imagen a que creen que se deba, gracias por la ayuda
hola a todos
He realizado un ejemplo en jsp, pero al realizarlo el ejemplo utilizando faces
http://localhost:8080/proyecto/faces/reporte.jsp
me da un error de ” input lenght =1″
saludos.
disculpa porque no me muesetra la imagen solo la X de que no encuentra la imagen en el jsp.
gracias
Accede directamente a la URL de la imagen, para esto en firefox puedes hacer algo como clic derecho sobre la imagen (la X) y luego “Ver imagen”, ahí podrás ver más detalles del error, posiblemente solo la URL sea incorrecta o hayas olvidado registrar el Servlet
esa verga no vale
Disculpen para lanzarlo en un proyecto java web como se manda a llamar la clase Servet????
Tienes que crear un mapeo para el servlet en el archivo de configuracion web.xml.
Aqui puedes ver la parte del mapeo:
http://lineadecodigo.com/java/crear-un-mapping-a-un-servlet/
Pero te recomiendo que crees el servlet usando Clic derecho > nuevo servlet en netbeans y despues de probarlo comiences a investigar la teoría
Muy bueno el ejemplo, me sirvio mucho gracias. Para comentar a las personas que no les genere la imagen y usan el ide Netbeans, deben de borrar esta linea de codigo en el servlet: PrintWriter out = response.getWriter();
Ola creo una calse que me genera el grafico d una zona con sus valores y mi metodo que crea la grafica es este public BufferedImage crearGrafica() pero bufferedImage marca que solo me retorna una imagen cierto? si me equivoco corrijanme porfavor y yo kiero obtener una grafica por cada zona pero noce como le puedo hacer me pueden ayudar porfavor
Te refieres a que quieres obtener una gráfica distinta por cada serie? (serie1, serie2, serie3)
Ok y ahora como instalo la libreria “jfreechart-1.0.14” dentro del proyecto
Descomprime jfreechart-1.0.14.zip, luego en el proyecto de netbeans clic derecho en “Libraries” en la pestaña “Projects”, luego add “JAR/Folder…” y luego te vas hasta la carpeta “lib” del archivo zip que descomprimiste al inicio y ahi seleccionas todos los archivos JAR. Y Listo.
Ok Gracias, ya me salio pero aparte de agregar la lib. “jfreechart-1.0.14” tambien agregue la lib. “jcommon-1.0.16”, quiero pensar que tambien es nesario por que despues de agregarla y correr mi “.jsp” que hace referencia al “Servlet” ya me mostro la grafica…
Estas en lo cierto, realmente sï JCommon es una dependencia de JFreeChart, como lo indican los mismos desarrolladores de JFreeChart en http://www.jfree.org/jfreechart/download.html en un comentario anterior dije que agregaras todos los archivos JAR dentro de esa carpeta pero solo por dejar las cosas simples porque algunos no son necesarios para el fin de mostrar una gráfica como la del ejemplo.
De ante mano muchas gracias por tu aporte me ha servido de mucho, pero ahora lo que realmente necesito hacer es que los valores de la grafica los jale de mi base de datos PostgreSQL pero ya estoy en proceso… si tienes alguna idea sobre esto te agradeceria si no ya es suficiente con lo anterior.
Oie otra pregunta como puedo hacer que la grafica se muestre en forma de barras pararelas no en lineal…
estuvo probando en el transcursi del sabado y domingo y ya me salio gracias…
Excelente trabajo, me ha quedado la gráfica lineal, sólo tengo una duda con respecto a si mi eje X es TIME, es decir, HH:mm:ss. Puesto que no encuentro alguna solución agradescería tu ayuda.
Struggling to get your car paid off? Are you mad
about the last deal you got? Perhaps you’re looking for an automobile now, and you’re not sure
what to do differently. You’re in the same boat with many other people. Keep reading to find out information regarding what to do next time you enter a dealership.
you are in point of fact a excellent webmaster. The site loading velocity is amazing.
It sort of feels that you are doing any unique trick.
Moreover, The contents are masterpiece. you have done a magnificent process on this subject!
Greate pieces. Keep writing such kind of info on
your blog. Im really impressed by your blog.
Hey there, You’ve done a great job. I’ll certainly digg it and personally recommend to
my friends. I’m sure they will be benefited from this web site.
me manda un error en
xylineandshaperenderer.setBaseShapesVisible(true);
soy nuevo en esto
Cual es el error? copia la traza del error completa. A partir de eso se puede determinar la causa.
como puedo hacer para que los datos los jale de una bd en sql o de un exel?
Asumo que te refieres a SQL Server de MS, en todo caso esto es una tecnología bastante distinta que MS Excel.
Para el primero estudia JDBC.
Para el segundo puedes usar POI. Aquí tienes alguna referencia http://elespaciodejaime.wordpress.com/2009/06/27/poi-interaccion-entre-java-y-documentos-de-excel/
En cualquier caso te recomiendo que te tomes unas cuentas horas para leer.