Utilizacion de Graficos con JFreeChart...(al fin pude)
Hola amigos les cuento que me he pasado toda la tarde estudiando sobre JFreeChart bien esta es una libreria la que nos permite crear graficas para utilizar en nuestros programas java, he estudiado estos ejemplos e intentare simplificar un poco las cosas sin embargo tambien pueden ver estos codigos de ejmplo que me sirvieron de mucho, al principio me marcaba errores, no me compilaba o no me reconocia los objetos pero dado al estudio fui deduciendo algunas cosas las cuales quiero compartir con ustedes para ver si les sirve de ayuda(talvez tengan problemas similares) bueno lo que intentare es ir posteando(o editando, con forme tenga tiempo) este post para ir poniendo el codigo y la explicacion del codigo fuente hasta llegar a crear una aplicacion que genere graficos con zoom.. (esa es mi meta personal ya que nunca lo he echo) manos a la obra..
1.- Empezaremos obteniendo las librerias
aca la pagina principal
aca la descarga directa:
nota: JFreeChart requiere JCommon class library tambien la pueden bajar en el enlace anterior
2.- Descomprimimos el paquete y exportamos los jar al directorio ext de java (me imagino que esto no require mucha explicacion)
para ello basta con copiar solo el jfreechart-1.0.9.jar (es la version que yo estoy usando) y jcommon-1.0.8.jar
3.- Podemos ver la demostracion que viene para que conoscamos un poco mas de las posibilidades mirar : jfreechart-1.0.9-demo.jar
Segun lo que he visto y todavia no lo he visto todo esta libreria no solo permite la vizualizacion de la grafica como imagen sino que tambien trae la posibilidad de guardar dicha imagen como JPG o como PDF por medio de la clase org.jfree.chart.ChartUtilities creo que esto es mas que suficiente para nuestros propositos...
4.- Ahora veremos un codigo simple que nos generara una grafica de barras y la muestra en un formulario.
* GraficoSimpleLin.java
*
* Created on 3 de noviembre de 2008, 8:11
*/
import org.jfree.data.xy.*;
import org.jfree.chart.*;
import org.jfree.chart.plot.*;
import java.awt.image.*;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import java.io.File;
import org.jfree.chart.plot.*;
import java.io.*;
import org.jfree.data.category.DefaultCategoryDataset;
/**
*
* @author Roberto Leon Cruz
*/
public class GraficoSimpleLin extends java.awt.Frame {
BufferedImage grafica = null;
//constructor
public GraficoSimpleLin() {
super("Aprendiendo a Graficar con Robert");
}
public BufferedImage creaImagen()
{
//XYSeries es una clase que viene con el paquete JFreeChart
//funciona como un arreglo con un poco mas de posibilidades
XYSeries series = new XYSeries("titulo de la serie");
//como su nombre lo indica el primer valor sera asignado al eje X
//y el segundo al eje Y
series.add(1, 23);
series.add(2, 34);
series.add(3, 51);
series.add(4, 67);
series.add(5, 89);
series.add(6, 121);
series.add(7, 137);
//se crea un objeto XYDataset requerido mas adelante por el metodo que grafica
XYDataset juegoDatos= new XYSeriesCollection(series);
/*aqui se hace la instancia de la nueva grafica invocando al metodo de ChartFactory
que nos dibujara una grafica de lineas este metodo como casi todos los demas
recibe los siguientes argumentos:
tipo valor
String nombre de la grafica , aparecera en la parte superior centro
String tutulo del eje X
String titulo del eje Y
XYDataset el conjunto de datos X y Y del tipo XYDataset (aqui cambian el parametro
dependiendo del tipo de grafica que se quiere pueden ver todos los parametros
en la documentacion aqui <a href="http://www.jfree.org/jfreechart/api/javadoc/index.html
" title="http://www.jfree.org/jfreechart/api/javadoc/index.html
">http://www.jfree.org/jfreechart/api/javadoc/index.html
</a> iremos notando los cambios mas adelante..
PlotOrientation la orientacion del grafico puede ser PlotOrientation.VERTICAL o PlotOrientation.HORIZONTAL
boolean muestra u oculta leyendas
boolean muestra u oculta tooltips
boolean muestra u oculta urls (esta opcion aun no la entiendo del todo)
generalmente solo necesitaremos cambiar los primeros 3 parametros lo demas puede quedarse asi
*/
JFreeChart chart = ChartFactory.createXYLineChart ("Titulo del grafico",
"Eje X","Eje Y",juegoDatos,PlotOrientation.VERTICAL,
false,
false,
true // Show legend
);
//donde guardaremos la imagen?? pues en un bufer jeje
BufferedImage image = chart.createBufferedImage(400,400);
return image;
}
//supongo que esto es demaciado obvio pero sino entienden pregunten...
public void paint(java.awt.Graphics g) {
//super.paint(g);
if(grafica == null)
{
grafica = this.creaImagen();
}
g.drawImage(grafica,30,30,null);
}
/**
* @param args the command line arguments
*
*solo nos resta invocar a nuestra grafica
*/
public static void main(String args[]) {
GraficoSimpleLin miventana = new GraficoSimpleLin();
miventana.setSize(450,450);
miventana.show();
}
}
esto quedaria mas o menos asi:
******en el siguiete post/edicion veremos como guardar una grafica como imagen JPG .....espero comentarios
| Adjunto | Tamaño |
|---|---|
| grafico1.JPG | 46.58 KB |
- blog de Shadonwk
- Inicie sesión o regístrese para enviar comentarios
Buen post
Buen post! bastante interesante la libreria. Esta como para echarle un lente.
Gracias
Javadabadoooo xD
Buen post
Definitivamente jfreechart es una de las mejores bibliotecas que he usado para la creación de gráficas, la recomiendo sin duda.
Aunque es muy fácil de usar, lo que hace falta a veces es una par de ejemplos que ayuden a entender como resolver un problema concreto. Es por ello que aplaudo la idea original del post. De mi parte buscaré por allí en mi cajón a ver si encuentro algo que considere les pueda servir.
En efecto esta biblioteca se puede usar para crear gráficas dinámicas para aplicaciones web, no hay ningún problema con eso.
Al respecto les comento que quizás la forma más sencilla de hacer esto es con el uso de JSTL. Existen varios proyectos relacionados con esto, uno de ellos es cewolf.
Recuerdo que cuando yo realicé algún proyecto para web, me decidí por Chart TagLibs, es una biblioteca muy simple y que que pude ajustar fácilmente a mis necesidades.
Complemento
Muy buen tutorial introductorio de jfreechart, gracias Shadonwk
Para complementar, pongo una lista de algunas cosas que se pueden hacer con jfreechart
http://www.jfree.org/jfreechart/samples.html
JavaRanch big moose saloon member
Licencia? web?
Interesante, y qué licencia tiene cada librería?
Se presta para hacer algo similar pero en aplicaciones web, y que genere nada más el jpg pero que sea una imagen dinámica y permita hacer zoom o tomar alguna acción si le dan click, etc?
Given the choice of dancing pigs and security, users will choose dancing pigs, every single time. - Steve Riley
hola Ezamudio no eh checado
hola Ezamudio no eh checado con exactitud que tipo de lincencia es lo que si se es que es gratis y a tu otra pregunta la respuesta es sip se puede cargar la imagen en alguna aplicacion web de echo en el primer enlace que pongo en post principal muestra como hacerlo y lo demas ya depende de las necesidades y la creatividad de cada desarrollador aqui intentare llegar hasta hacer un zoom se aceptan sujerencias o codigo de ejmplo ya que es la primera vez que lo are...saludos.
Acabo de leer en la página
Acabo de leer en la página y JFreeChart es "free software" (diferente de "open source") bajo la licencia LGPL ;-)
Muy buen post Shadownk, no conocía la librería y creo que me va a ser muy útil para un par de proyectos.
Saludos!
--
Javier Benek
LGPL
Perfecto! Gracias por la info. Significa que se puede usar en proyectos comerciales sin que toda la aplicación se vuelva GPL (aunque no sé por qué tanta gente le tiene miedo a eso). Si una aplicación a la medida para un cliente se vuelve GPL realmente no pasa nada, mientras no la quieran distribuir, y generalmente no les interesa distribuirla, es algo para uso interno.
Given the choice of dancing pigs and security, users will choose dancing pigs, every single time. - Steve Riley