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

Utilizacion de Graficos con JFreeChart...(2da parte)

hola compañeros como estan, bueno seguire con este minitutorial y en este post aprenderemos a generar una grafica y guardarla como imagen jpg en nuestro disco duro anque hay algunos inconvenientes que aun no entiendo espero puedan ayudarme a resolverlos...

import org.jfree.data.xy.*;
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;

import java.awt.image.*;
import javax.swing.*;

public class GuardarGrafica extends JFrame
{
       
    BufferedImage grafica = null;

    //constructor
    public GuardarGrafica() {
        super("Aprendiendo a Graficar con Robert 2");
       
    }

   

    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
        );
        /************************************************
        ************************************************
        esta clase es identica a la puesta en el primer post salvo que meteremos las lineas siguietnes
        las cuales nos serviran para guardar la grafica generada en la ubicacion recibida como parametro
        del constructor File en este ejemplo la guardara en la misma carpeta donde cree la grafica y eso
        es todo es muy sencillo vdd?
        */

        try
                {  
                        ChartUtilities.saveChartAsJPEG(new File("E:\\septimo Semestre\\GraficarJava\\NombreGrafica.jpg"), chart, 500,
                        300);
                } catch (IOException e) {
                        System.err.println("Error creando grafico.");
                }
        //****************************************************************************************************************
        //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[]) {

        GuardarGrafica miventana = new GuardarGrafica();
        miventana.setSize(450,450);
        miventana.show();
    }

}

bien ahi esta la clase solo se le agrego un bloque try que es para crear el archivo JPG de la grafica bien compilando esta clase no da error sin embargo cuando aparece el Frame al parecer no se dibuja bien y aparece medio raro otra es que la imagen la guarda en el disco pero con fondo rojo esto es lo que pasa en mi caso y segun los ejemplos que he estado bien no habla nada hacerca de eso les pediria que prueben y vean si les pasa algo similar o si alguien puede ayudar a resolverlo se le agradecera...

en otro punto quiero ponerle un zoom a la grafica se aceptan sujerencias.......

gracias eso es todo por ahora....

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.

ZOOM

Para el zoom existe un componente q provee el JFreeChart se llama ChartPanel, este tiene métodos para realizar el Zooming.
A en su constructor recibe un JFreeChart:
jframe.getContentPane ().add (new ChartPanel (jfreeChart) );
A ver si sirve.... :)

Imagen de Shadonwk

excelente comentario

excelente comentario actionmarc lo tomare en cuenta y hare las pruebas pertinentes pero estaria genial
que tu puedieras hacer un minututorial o subir un ejemplo funcinando de una grafica simple o mandarme
las clases necesarias para la creacion a mi correo y yo lo publico en tutorial.. roberto.leon@alfasystemas.com.mx gracias..

necesito una ayudita

hola como estas, lo primero que quiero es darte las gracias, este y el anterior post me fueron de muchisima ayuda.
lo 2º: queria preguntarte como puedo hacer para acotar el area del grafico, es decir dar un maximo valor a las ordenadas y absisas, para poder mostrar solo la parte del grafico que me interesa. porque se me presento el problema de que por ahi la escala se hace demasiado grande y no puedo ver bien el grafico.
desde ya gracias.

Ayuda

hola a todos resulta que tengo un problema al ejecutar una aplicación que utiliza la librería jfreechart. El problema es todo el programa funciona correctamente cuando lo compilo y lo corro en netbeans. pero cuando abro el .jar que genera el IDE la parte de la gráfica no funciona. me podrían ayudar con esto gracias?

Imagen de Shadonwk

hola esteb0107 podrias

hola esteb0107 podrias detallarnos un poco mas el error que te sale?, si es lo que estoy pensando talvez se deba a que no tienes configurado bien el classpath de java para ejecutar archivos .jar

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