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:
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
Suscribirse a:
Enviar comentarios (Atom)
Con la tecnología de Blogger.
Hola y si fueran para los 2 ? XY
ResponderEliminarEncontraste la solución?
EliminarHola 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.
ResponderEliminarMuchas Gracias!! me ayudó mucho.. justo estaba buscando eso :)
ResponderEliminarBuenas tardes, quiero poner un check que al seleccionarlo elimine una linea del grafico, se puede?
ResponderEliminarHola 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