domingo, 29 de mayo de 2011

Ejemplo práctico: Histograma de ingresos de 45 personas

En respuesta a br-admin estoy adelantando el tema de los histogramas. Este gráfico estadístico es cubierto en JFreeChart por el paquete org.jfree.data.statistics.
muy diferente a un gráfico de barras, en un histograma la base de cada rectángulo representa al intervalo(en el ejemplo vemos 8 rectángulos ya que el intervalo es 8) y la altura a la frecuencia.


Ejemplo



El resultado con JFreeChart es el mismo

package jfree;
import java.io.File;
import java.io.IOException;
import javax.swing.JPanel;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYBarRenderer;
import org.jfree.data.statistics.HistogramDataset;
import org.jfree.data.xy.IntervalXYDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

public class Histograma extends ApplicationFrame {
public Histograma(String title) {
super(title);
JPanel chartPanel = crearPanel();
chartPanel.setPreferredSize(new java.awt.Dimension(500, 475));
setContentPane(chartPanel);
}
private static IntervalXYDataset crearDataset() {
HistogramDataset dataset = new HistogramDataset();
//vecto almacena los ingresos quincenales de 45 personas
double vector[] = {63, 89, 36, 49, 56, 64, 59, 35, 78,
43, 53, 70, 57, 62, 43, 68, 62, 26,
64, 72, 52, 51, 62, 60, 71, 61, 55,
59, 60, 67, 57, 67, 61, 67, 51, 81,
53, 64, 76, 44, 73, 56, 62, 63, 60};
//En el ejercicio nos piden construir una distribución de frecuencias de 8 intervalos
//Por eso ponemos 8 en el tercer parámetro del addSeries
dataset.addSeries("Frecuencias de los ingresos", vector, 8);
return dataset;
}
private static JFreeChart crearChart(IntervalXYDataset dataset) {
JFreeChart chart = ChartFactory.createHistogram(
"Histograma",
null,
null,
dataset,
PlotOrientation.VERTICAL,
true,
true,
false
);
XYPlot plot = (XYPlot) chart.getPlot();
XYBarRenderer renderer = (XYBarRenderer) plot.getRenderer();
renderer.setDrawBarOutline(false);
try{
ChartUtilities.saveChartAsJPEG(new File("C:\\histograma.jpg"), chart, 500, 475);
}
catch(IOException e){
System.out.println("Error al abrir el archivo");
}
return chart;
}
public static JPanel crearPanel() {
JFreeChart chart = crearChart(crearDataset());
return new ChartPanel(chart);
}
public static void main(String[] args) throws IOException {
Histograma histo = new Histograma("Histograma");
histo.pack();
RefineryUtilities.centerFrameOnScreen(histo);
histo.setVisible(true);
}
}


Casi al final del video cambio los valores del array vector así
double vector[] = {1, 2, 3, 4, 5, 4, 4, 4, 3, 3};

y el resultado es

ya que el número 4 se repite 4 veces en el vector ésta es la más alta, en cambio el 1, 2 y 5 sólo aparecen una vez en el vector por eso su altura es de 1.


Espero te haya ayudado este tutorial, visita mi nuevo proyecto Test de Velocidad en el Teclado http://clubtyping.com/es

10 comentarios:

  1. Que tal compañero oye una pregunta amm como le hago para que netbeans me reconosca lo que es la paqueteria de Jfreechart y nose igual tengo entendido que tenemos que usar la JCommond o algo asi por favor agradeceria tu respuesta te dejo mi correo
    vegita_951@hotmail.com

    ResponderEliminar
  2. Hola, por favor te recomiendo que publiques a todos las respuestas q te pidan

    ResponderEliminar
    Respuestas
    1. Me hackearon y perdí el acceso al blog hasta ahora. Bueno suerte

      Eliminar
  3. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  4. Como podríamos agregar una línea al histograma?
    Tengo un histograma con una distribución uniforme y quiero agregar la frecuencia esperada.
    Algo así:
    http://oi50.tinypic.com/27xpelz.jpg

    ResponderEliminar
    Respuestas
    1. Hola pues lamentablemente ya dejé de usar Java pero lo único que se me ocurré, aunque no va a quedar como quieres pero podría ser que le pongas una imagen de fondo al gráfico... Puedes ver la publicación en la que se agrega una imagen de fondo.. espero te sirva

      Eliminar
    2. Hola Hero! encontraste como hacerlo?, en un foro en ingles vi que uno hablaba de usar anotaciones, pero 0 idea como se usan

      Eliminar
  5. me pordrias regalar los dos plugin es que descargo los dos paquetes pero no encuentro los .jar...
    gracias

    ResponderEliminar
    Respuestas
    1. que raro, bueno ya no los tengo, te aconsejo que veas bien la primera publicación de este blog y también mira el video con el q creo se entiende mejor. suerte

      Eliminar
    2. Hola pues lamentablemente ya dejé de usar Java pero lo único que se me ocurré, aunque no va a quedar como quieres pero podría ser que le pongas una imagen de fondo al gráfico... Puedes ver la publicación en la que se agrega una imagen de fondo.. espero te sirva

      Eliminar