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

AdjuntoTamaño
grafico1.JPG46.58 KB

Buen post

Imagen de jali

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.

Sale y vale
Byte

Complemento

Imagen de iberck

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?

Imagen de ezamudio

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

Imagen de jb

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

Imagen de ezamudio

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