Dudas de Programacion » Java Frameworks » Librerías Java

JfreeChart

(16 posts)

Tags:

No tags yet.

  1. cascabel
    Member

    Buenas a tod@s

    Tengo que hacer una aplicación que me muestre unos valores en unas gráficas. He encontrado una libreria supero maja que te da todo el trabajo hecho y con unas pocas de líneas de código te metes lo valores en las gráficas. El jfreechart(que asi se llama) me esta dando un problemilla. Tengo la ventana con los datos correctamente, lo único que no soy capaz de que me alinee correctamente las nombres que pongo en las columnas con las barras.

    ME explico un poco mas a fondo. La gráfica en el ejeY contiene los nombres de los dos mejores empleados de una empresa por cada uno de los meses, es decir:

    Ene(Perez-Gomez)
    Feb(Garcia-Martinez)
    Mar(Garcia-Martinez) ....

    En el eje X se refleja el volumen de ventas de cada empleado.

    El problema esta que jfreechart cuando los meses tienen los mismos mejores empleados(caso de febrero y marzo) pues junta las barras pero los nombrs lo deja en el mismo sitio y claro...Esto genera un desajuste gráfico que hace difícil la comprensión.
    ¿Alguien sabe como decirle al jfreechart que haga el favor de estarse quietecito con las barras...jejeje?

    Espero haberme explicado claramente.

    Un saludo y muchas gracias de antemano.

    Posted 1 year ago #


  2. Buenas!

    Leído el xml pasamos a mostrar los datos? jeje

    Yo he utilizado JFreeChart en varios proyectos, JFreeChart está bien pero hace tiempo que no la actualizan, es para mostrar en una aplicación web? porque hay muchas librerías de js con gráficas que son una pasada...

    No entiendo bien como quieres mostrar la información:

    Empleados
    |
    |
    |
    |
    |___________________ Ventas

    No tiene mas sentido al revés? la idea es una tabla resultante parecida a esta no?

    http://www.jfree.org/jfreechart/images/DualAxisDemo1.png

    Solo que con 2 barras en lugar de 3?

    Saludos
    Posted 1 year ago #
  3. cascabel
    Member

    Jejejeje ojala solo fuera eso...xD

    No es solo sacar los datos de alguna manera en una grafica, tengo libertad para hacerlo "mas o menos como quiera".Tengo que hacer mas cosillas y no me quiero complicar demasiado con esto. Me gusto la idea es bastante sencillo y codigo hay que picar bastante poco.

    COn dos barras es suficiente. En el eje x se mostraria el volumen de ventas y en el ejey los meses(y ademas los dos mejores empleados de cada mes).

    Una solución a medio plazo que encontre es hacer distinta la entrada de cada uno de los valores del ejey es la siguiente. Utilizar algo que distinga las entradas entonces lo que hice fue en lugar de pones solo el nombre de los empleados es añadirle algo que indentifica al mes, es decir:
    En->Garcia,Ramos
    Fe->Garcia,Ramos

    Con esto consegui que no me juntara las entradas iguales, en un pequeño avance aun así sigue habiendo un pequeño desajuste y en los primeros meses la barra salen quizas medio centrimetro por arriba del nombre y en los ultimos casi medio centimetro por debajo. TIene que haber alguna manera de decirle que pinte la barra a la altura del nombre...pero por mas que miro no la encuentro...

    Por cierto la tabla resultante esa...Si me dices como se hace para inclinar los nombres de lo que tengo en el ejex quizas podria poner el nombre de los empleados y los meses en el ejex y las ventas en el ejey...(es decir al reves de como lo tengo hecho porque ahora lo tengo configurado asi... JFreeChart chart = ChartFactory.createBarChart("Volumen de ventas","","Ventas",dataset,
    PlotOrientation.HORIZONTAL,...);
    y la ventana mas alta que ancha...

    PEro la mejor manera seria como tu dices...el tema es que asi como no se inclinar los nombres pues se me solapan y me queda hecho una autentica guarrada...xD. Por eso opte por la otra forma...jejeje

    Muchas gracias por responder.

    Un saludo

    Posted 1 year ago #
  4. Buenas para las etiquetas,

            CategoryPlot plot = (CategoryPlot)chart.getPlot();
            CategoryAxis xAxis = (CategoryAxis)plot.getDomainAxis();
            xAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
    Posted 1 year ago #


  5. Buenas again,

    no se cuantos empleados pueden existir, pero de esta manera a mi me gusta como queda:

     
    import java.io.File;
    import java.io.IOException;
     
    import javax.swing.JFrame;
     
    import org.jfree.chart.ChartColor;
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartPanel;
    import org.jfree.chart.ChartUtilities;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.axis.CategoryAxis;
    import org.jfree.chart.axis.CategoryLabelPositions;
    import org.jfree.chart.plot.CategoryPlot;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.data.category.DefaultCategoryDataset;
    import org.jfree.data.xy.XYDataset;
    import org.jfree.data.xy.XYSeries;
    import org.jfree.data.xy.XYSeriesCollection;
     
    public class EjemploGraficas {
        public static void main(String[] args) {
     
            // Creamos y rellenamos el modelo de datos
            DefaultCategoryDataset dataset = new DefaultCategoryDataset();
     
            dataset.setValue(100, "empleado1", "Enero");
            dataset.setValue(120, "empleado3", "Febrero");
            dataset.setValue(110, "empleado2", "Marzo");
            dataset.setValue(103, "empleado5", "Abril");
            dataset.setValue(106, "empleado6", "Mayo");
     
            dataset.setValue(60, "empleado2", "Enero");
            dataset.setValue(62, "empleado4", "Febrero");
            dataset.setValue(61, "empleado4", "Marzo");
            dataset.setValue(63, "empleado3", "Abril");
            dataset.setValue(66, "empleado3", "Mayo");
     
            JFreeChart chart = ChartFactory.createBarChart3D("Ventas", "Mes",
            		   "Número ventas", dataset, PlotOrientation.VERTICAL, true,
            		   true, false);
     
            CategoryPlot plot = (CategoryPlot)chart.getPlot();
            CategoryAxis xAxis = (CategoryAxis)plot.getDomainAxis();
            xAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
     
            chart.setBackgroundPaint(ChartColor.WHITE);
            try {
                ChartUtilities.saveChartAsPNG(new File("chart.png"), chart, 400, 300);
             // Creación del panel con el gráfico
                ChartPanel panel = new ChartPanel(chart);
     
                JFrame ventana = new JFrame("El grafico");
                ventana.getContentPane().add(panel);
                ventana.pack();
                ventana.setVisible(true);
                ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            } catch(IOException e) {
                e.printStackTrace();
            }
        }
    }
     

    Un saludo

    Posted 1 year ago #
  6. cascabel
    Member

    Buenas.

    Lo que me ofreces queda muy vistoso si que es cierto.

    Lo que pasa es que lo que necesito no es exactamente asi. Quizas no me explique bien.

    Te voy a comentar la manera que necesito. Por cada mes una barra. Supon que solo hay meses y ventas, de modo que en el ejex irian enero,febrero,... y en el ejey las ventas en cada mes(pero las totales no separadas por empleados que es lo que me ofreces). Asociado a cada mes el nombre de los 2 empleados que mas ganaron en el mes,pero eso no es problema, de hecho ignóralo. Es decir en resuemn quiero tener en el eje x 12 meses y en el eje y las ventas asociadas a cada mes. Como los nombres del eje x seran muy largos me gustaria tenerlos inclinados. ¿Me podrias poner un ejemplo con lo que te dije con las barras en 3D que queda muy bien?

    ¿Para inclinarlos utilizas esto no?

            CategoryPlot plot = (CategoryPlot)chart.getPlot();
            CategoryAxis xAxis = (CategoryAxis)plot.getDomainAxis();
            xAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);

    ¿y con la ultima linea supongo que le diras los grados que lo quieren inclinar no?

    Muchas gracias por responder

    Posted 1 year ago #
  7. Buenas again,

    Sería lo mismo pero con una única entrada para cada mes en el data set, y en lugar de "empleado1", "empleado2", etc. pon "ventas".

    Hay un tema de subCategorias que igual te sirve, aunque en tu caso la información de los empleados es independiente de lo que muestras en la gráfica, te puede servir.

    http://www.roseindia.net/chartgraphs/stacked-bar-chart1.shtml

    Posted 1 year ago #


  8. cascabel
    Member

    Buenas gracias por responder de nuevo.

    Ya lo tengo solventado y todo como queria.

    Ahora solo me queda una cosilla mas. Tengo que generar las mismas graficas en un documento html. Es decir desde java tengo que hacer un documento html con un par de graficas. Pero vamos como si fuera una porque cogida la idea para una hechas todas.
    No creo que sean demasiadas lineas de código pero nunca lo hice...

    Nunca he hecho esto, así que cualquier ayuda me viene muy bien.

    Necesitaria un guia o manual desde 0...para poder tomar conceptos. ¿Alguna idea?¿Alguien le ha surgido este problema?¿Cómo debo de empezar?

    Saludos y muchas gracias de antemano.

    Posted 1 year ago #
  9. Si es solo un html para mostarlo, coge los .png que te genera el JFreeChart y muestralos.

    chart.png en este caso

    Posted 1 year ago #
  10. cascabel
    Member

    Buenas de nuevo.

    Lo que propones es una buena idea, no se me habia pasado por la cabeza. Lo que pasa es que me piden que sea de la forma mas óptima(como siempre...xD). No digo que no sea la mas óptimo. Pero me gustaría ver cual es tu opinión. Pero vamos digo yo..¿que manera más optima que mostrar un dibujo en html en lugar de nadar pintandolo?

    Lo que no gustaria es que me llamen cómodo o que de la impresión de que hago esto porque no se hacer lo otro...Si lo hago así tendría que dar un argumento de peso como que es la manera más óptima que se me ocurrió.

    De todos modos la impresión que me da es no va quedar muy bien hacerlo así porque parece como que estoy escurriendo el bulto...Entonces sería mejor aunque sea más código hacerlo sin contar con las imagenes.

    Saludos

    Posted 1 year ago #
  11. Buenas,

    Si ya tienes una aplicación Java que genera las gráficas lo mas óptimo es usar el gráfico generado.

    Al principio te preguntaba si era una aplicación web porque tienes alternativas en javascript que generan gráficas y también el propio JFreeChart genera gráficas que se pueden mostrar a través de un servlet en una jsp por ejemplo.

    http://www.geodaq.com/jfreechart-sample/index.html

    http://www.geodaq.com/jfreechart-sample/bar_chart.jsp

    Un saludo

    Posted 1 year ago #
  12. cascabel
    Member

    No no es ninguna aplicación web. Es un programa en java.

    Las funcioens que tiene que hacer son:

    -cargar ficheros txt o xml los datos de las ventas y de las fichas de unos empleados.

    -generar unas graficas en swing:ventas por mes y porcentaje de ventas por ciudad.

    -por ultimo generar las mismas graficas en un fichero html

    En esto ultimo ando liado. La idea de las imagenes es buena y seguramente la mas óptima pero yo creo que lo que están pidiendo es picar el código para ver que se generar un documento HMTL "manualmente". No se muy bien como empezar necesitaria algo de documentación para poder empezar a abordar el problema. Porque ahora mismo ando perdido...Estoy mirando pero no encuentro algo en lo que expliquen de las manera más detalladas posible lo que estoy buscando.

    A ver si os ocurre algo que me sirva de ayuda.

    Mil gracias. Un saludo.

    Posted 1 year ago #
  13. cascabel
    Member

    He conseguido un pequeñisimo avance.

    Soy capz de generar un documento HTML con algunos caracteres.
    De este modo:

    	public void generaGraficaVolVentas(Info info) {
    		FileOutputStream archivo;
    		String texto="VOLUMEN DE VENTAS";
    		PrintStream p;
    		try {
    			archivo= new FileOutputStream("VolumenVentas.html");
    			p= new PrintStream(archivo);
    			p.println(texto);
    			p.close();
    		} catch (FileNotFoundException e) {
    		}
    	}

    Claro ahora tendria que empezar a dibujar todas las graficas y me parece muy complicado. ¿Alguna idea?

    Posted 1 year ago #
  14. Buenas!

    Entiendo quieren generar un informe con las gráficas, lo mas normal sería usar el IReport o algo de esto, no se porque html...

    Pero la idea que llevas está bien, meter el html en buffer de String y luego volcarlo a un fichero .html

    Para que se vean las gráficas <img>

    Un saludo

    Posted 1 year ago #
  15. fiurer87
    Member

    Visita:

    http://www.programadorez.com/foros/viewforum.php?f=60

    para ver algunas cosas de JFreechart

    Posted 1 year ago #

Reply »

You must log in to post.

1,070 posts in 437 topics over 40 months by 388 of 892 members. Latest: lalala, nijh1, jasu

Acerca de...

Dudas de Programación es una Web, dentro del proyecto aulambra.com que nace con la idea de propocionar un foro de consultas sobre diferentes temas de programación. Orientado a ayudar a los internautas hispano-hablantes en Internet.

Ir al Blog de Linea de Código

Otras Webs