Una forma sencilla y rápida de aprender JAVA, observando y deduciendo cómo se comporta el lenguaje a través de ejemplos prácticos.

Archivo del blog

martes, 21 de octubre de 2014

Gráficas con JFreeChart (VII). Poner un rango fijo en el Eje X.

Esta vez nos interesa poner el eje X de la gráfica a una escala fija (no auto-escalable). Antes cuando se creaba una gráfica el eje X se adaptaba automáticamente a los valores máximos y mínimos recibidos. Ahora queremos que el rango del eje X esté entre 0 y 100 (independientemente de los valores recibidos).

Para poder apreciar bien la diferencia he usado como plantilla el ejemplo del post "Gráficas con JFreeChart (V)" cuyo Eje X se adaptaba al valor máximo recibido que era 60. En este caso el Eje X de la gráfica se adapatará al rango que le hayamos indicado (0-100).


Código (Demografia.java):

package crecimientoPoblacion;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;


public class Demografia1 {

    public static void main(String[] args) {

        DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        double poblacion = 25;
        int esperanza_de_vida = 5;
        double defunciones;
        double poblacion_neta;

        double tc = 0.2; // tasa de crecimiento 20%
        double tm = 0.4; // tasa de mortalitat 40%

        for (int tiempo = 0; tiempo < esperanza_de_vida; tiempo++) {

            // Crecimiento
            poblacion = poblacion * (1 + tc);
            dataset.addValue(poblacion, "Crecimiento", "" + tiempo);

            // Mortalidad
            defunciones = poblacion * tm;
            dataset.addValue(defunciones, "Mortalidad", "" + tiempo);

            // Crecimiento Neto
            poblacion_neta = (poblacion - defunciones);
            dataset.addValue(poblacion_neta, "Crecimiento neto", "" + tiempo);

        }

        JFreeChart chart = ChartFactory.createLineChart(
                "Calculo demografico",
                "Tiempo",
                "Población",
                dataset,
                PlotOrientation.VERTICAL,
                true,
                false,
                false
        );
        
        // Rango Eje X estático de 0 a 100
        CategoryPlot plot = chart.getCategoryPlot();
        NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
        rangeAxis.setRange(0, 100);    
        
        // Mostramos la grafica en pantalla
        ChartFrame fr = new ChartFrame("Cálculo Demográfico II", chart);
        fr.pack();
        fr.setVisible(true);

    }

}


Resultado:





















6 comentarios:

  1. Hola y si fueran para los 2 ? XY

    ResponderEliminar
  2. Hola y ¿cómo hago para manejar las proporciones en un cuadro determinado con una función específica como seno por ejemplo? Es decir, que me quede de igual forma en una gráfica con determinados rangos y demás.

    ResponderEliminar
  3. Muchas Gracias!! me ayudó mucho.. justo estaba buscando eso :)

    ResponderEliminar
  4. Buenas tardes, quiero poner un check que al seleccionarlo elimine una linea del grafico, se puede?

    ResponderEliminar
  5. Hola buenas tardes. Buen aporte. Me pregunto de que forma puedo hacer para modificar el rango desde dos jTexTfield y un jbutton. Uno para el máximo y otro para el mínimo y el botón para generar el evento. El jFreeChart lo tengo en jpanel y hasta ahí todo bien, pero no me deja cambiar el rango desde el botón y los jTextField.

    ResponderEliminar

Con la tecnología de Blogger.