style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

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

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

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

Imagen de Shadonwk

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.

Imagen de benek

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

Imagen de ezamudio

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

Imagen de iberck

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

Imagen de 1a1iux

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

Imagen de jali

Buen post

Buen post! bastante interesante la libreria. Esta como para echarle un lente.

Gracias
Javadabadoooo xD

Imagen de carlAguida

Pues estoy a la espera de la

Pues estoy a la espera de la segunda parte, espero pronto hacer esto y mostrarselo con webObjects (que es un lenguaje que tiene como base java) pero usando graficas de google

Muy buen post

Saludos,
Carlos

Imagen de ezamudio

WebObjects

WebObjects no es un lenguaje, es un framework para desarrollo de aplicaciones web, como Struts, Tapestry, etc con un enfoque muy distinto a JSP, JSF, etc.

Lo mejor de WebObjects es EOF, el Enterprise Objects Framework, un ORM que la verdad me gusta bastante aunque no es muy escalable por lo del EditingContext; hay uno muy similar llamado Cayenne que es de software libre, ya que WebObjects es de Apple y no le dan nada de promoción, aunque viene gratis con las herramientas de desarrollo (que vienen incluidas con cualquier mac).

Given the choice of dancing pigs and security, users will choose dancing pigs, every single time. - Steve Riley

Imagen de iberck

Cayenne

Hola enrique:

Podrías profundizar un poquito en el tema de Cayenne, he escuchado últimamente mucho acerca de este framework.....

JavaRanch big moose saloon member

Imagen de Shadonwk

Saludos

gracias por comentar mi post te dejo el enlace hacia la segunda parte: http://javamexico.org/blogs/shadonwk/utilizacion_de_graficos_con_jfreech...

p.d. tratare de darle seguimineto sucede que he estado muy ocupado...

Primero que nada, gracias

Primero que nada, gracias por compartir esto.

Podrás ayudarme con unas dudas acerca de esto? Te cuento mi caso.

Soy estudiante y nos dejaron hacer unos programas en java implementando gráficas y según lo que leí es que JFreeChar es la mejor opción libre que tengo. En mi máquina corro Slackware Linux (v13) y he instalado el JDK en /usr/java/jdk1.6.0_18 y al descargarme el JFreeChart y el JCommon los descomprimi y los ubique en /usr/java/jdk1.6.0_18/lib/jfreechart-1.0.13 y /usr/java/jdk1.6.0_18/lib/jcommon-1.0.16 respectivamente.

Modifiqué mis variables PATH y CLASSPATH quedando de la siguiente manera:

CLASSPATH=/usr/java/jdk1.6.0_8/lib/:/usr/java/jdk1.6.0_18/lib/jfreechart-1.0.13/lib/jfreechart-1.0.13.jar:/usr/java/jdk1.6.0_18/lib/jcommon-1.0.16/lib/junit.jar
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games:/usr/java/jdk1.6.0_18/bin/:/usr/lib/java/bin:/usr/lib/kde4/libexec:/usr/lib/qt/bin:/usr/share/texmf/bin:.

Lo único que he logrado hasta ahorita es compilar los .java, anteriormente me indicaba de que no se encontraba la clase pero, al hacer los cambios anteriores ya logré que compilara pero, no puedo ejecutarlos :S

El IDE que estoy usando es GEANY, por ser ligero, ya que mi máquina no es de muchos recursos que digamos.

Podría indicarme la forma correcta de integrar el JFreeChart? O qué estoy haciendo mal? Qué debo corregir?

Gracias por el tiempo que te puedas tomar para responder.

Imagen de rodrigo salado anaya

opcion muy fácil...

hola shunco puedes usar esta opción para tu proyecto, aun que el tema de este aporte es muy bueno :) :
http://java.sun.com/javafx/1.2/docs/api/javafx.scene.chart/javafx.scene....
ejemplos:
http://blogs.infosupport.com/blogs/paul_bakker/archive/2009/07/10/javafx...

lo bueno es que es muy fácil de usar.

Vale... Gracias hermano...

Vale...

Gracias hermano... checaré ese proyecto. Aunque sí me gustaría que se solucionara esa cuestión. Ya copié todos los jars de los comprimidos que bajé a la carpeta ex y nada.

Solucionado

Bueno amigos...

He de comentarlos que solucioné mi problema instalando el JDK desde los paquetes que hay disponible en el repositorio de la Universijddad de Oregon.

la variable CLASSPATH la eliminé y también eliminé la ruta que agregué en mi path para el JDK que tenía en un principio (/usr/java/jdk.x.xx_x) y conservé los jars en la ruta original de mi JRE en mi slackware (/usr/lib/java/lib/ext).

Jala perfecto con el GEANY.

Imagen de E_Ortega

duda con JFrame y JFreeChart

Estoy haciendo un programita simple para aplicar el JFreeChart; ya creé uno en donde seteo los datos manualmente, y me funcionó; eso en NetBEans.

Ahora estoy en la incógnita de, ¿Cómo insertar una gráfica de JChart a un JFrame de Swing?

Alguién lo ha hecho que me de una idea??

Estoy usando JFreeChart 1.0.13 y JCommon 1.0.16

Imagen de Shadonwk

se supone que simplemente

se supone que simplemente cambiando:

public class GraficoSimpleLin extends java.awt.Frame

por

public class GraficoSimpleLin extends JFrame

todo deberia funcionar...

Imagen de sock_osg

alterar logica de la grafica

hola que tal, alguien sabe como se puede alterar la logica de la grafica? me refiero a que por ejemplo si tengo una grafica en cascada, el primer valor lo omita y a partir del segundo valor contionue con su logica normal. Saludos y espero puedan ayudarme.

Imagen de AlexSnake

Lo que andaba buscando

Gracias por revivir este blog @sock_osg. me ahorraste una busqueda en google. =P

Imagen de sock_osg

alterar logica de la grafica( RESULETO )

Pues antes que nada, hace tiempo ke resolvi mi duda( me ayudo un amigo del trabajo en todo el proceso ) pero pues no lo había publicado jeje, pues bien, para modificar la lógica de las graficas descargue el codigo fuente del jfreechart y fui siguiendo el codigo hasta que di con la parte que grafica, en mi caso( para la grafica de cascada ) la clase WaterfallBarRenderer la cual tiene el método

public void drawItem(Graphics2D g2,
                         CategoryItemRendererState state,
                         Rectangle2D dataArea,
                         CategoryPlot plot,
                         CategoryAxis domainAxis,
                         ValueAxis rangeAxis,
                         CategoryDataset dataset,
                         int row,
                         int column,
                         int pass)

Esta api utiliza 2D Graphics del JDK de Java, entonces la clase que se altera unicamente se agrega a tu codigo fuente con todo y su ruta del paquete, la cual es ......

org.jfree.chart.renderer.category

Cuando la maquina virtual esta interpretando el codigo y encuentre una referencia a esa clase, buscará primero en las clases originales o nativas por asi decirlo de tu proyecto, y si no existen ahi las buscara en las dependencias o en los jars de la carpeta lib del proyecto, por lo que tomará directamente las clases que has modificado y generará la grafica de acuerdo a la nueva logica que se ha modificado.

graficos estadisticos en jsf

Hola a todos, estoy haciendo un proyecto, xfavor necesito q alguien me ayude como crear graficos estadisticos(de barra, pastel), para mostrar en paginas web JSF.

Saludos

Imagen de jujogoru

Gracias =)

Muchas gracias por el aporte, me sirvió de mucho, bien explicado, gracias.

Probema al generar grafica en aplicación java

Hola!!!

Alguien me podria ayudar con mi proyecto, lo que pasa es que estoy generando una aplicacion java en la cual guarda registro en una base de datos y realiza reportes con los mismos asi como graficas, estoy utilizando el net beans para la construccion de mi aplicación y iReport para mis reportes, el problema es que al generar el jar no me aparcen las graficas ya sea que las genere con el iReport o en jfreechart; la verdad no entiendo el problema ya que en el net beans funcionan bien y al momento de correr el .jar no las muestra y lo raro es que no manda ninguna exepción.

Ojala y alguien me pueda orientar. Mi correo es hugo-bison81@hotmail.com

Saludos!!!

Imagen de Shadonwk

Hola @bison creo que el

Hola @bison creo que el problema es que al generar el jar no incluyes las bibliotecas necesarias para generar dichas graficas, en netbeans funciona porque el mismo ide agrega las bibliotecas en automatico al entorno de compilación y de ejecución pero no lo hace al empaquetar..

Imagen de Moctezuma

Duda

Buen post, ya ningun problema

Imagen de black_ice_gt

Linea limite

Hola que tal a toda la comunidad, he utilizado JfreeChart y la verdad es genial, pero tengo una duda de algo que quisiera hacer pero no sé como entrarle al asunto...

Ya he generado mi gráfica de barras, funciona bien y sin problemas. Ahora lo que quisiera hacer es PINTAR una linea que marque un limite a las graficas, es decir, si los valores del eje de las ORDENADAS va de 0 a 100 quisiera pintar una linea que atraviese toda la gráfica en el punto (0,50).

espero haberme explicado.

Este el codigo que utilizo:

       String Plano="PLANO5";        

     
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.setValue(5000, Plano, "JORGE");
dataset.setValue(4000, "GORRA", "JORGE");
dataset.setValue(4500, Plano, "OSCAR");
dataset.setValue(2900, "GORRA", "OSCAR");
dataset.setValue(4800, Plano, "RAMON");
dataset.setValue(3600, "GORRA", "RAMON");
dataset.setValue(3600, "GORRA", "CHEBETO");
dataset.setValue(1000, Plano, "CHEBETO");

JFreeChart chart = ChartFactory.createBarChart3D("Nivel de PRODUCCION",
"TRABAJOR", "PUNTADAS",
dataset, PlotOrientation.VERTICAL, true, true, false);

CategoryPlot plot = chart.getCategoryPlot();

BarRenderer render = (BarRenderer)plot.getRenderer();
render.setSeriesPaint(0, Color.darkGray);
render.setSeriesPaint(1, Color.LIGHT_GRAY);
chart.setBackgroundPaint(Color.RED);  
       
  ChartFrame frame = new ChartFrame("Gráfico de Barras", chart);
frame.pack();
frame.setVisible(true);  

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">