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.
Primero que nada debemos saber que un histograma es
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
Espero te haya ayudado este tutorial, visita mi nuevo proyecto Test de Velocidad en el Teclado http://clubtyping.com/es
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
ResponderEliminarvegita_951@hotmail.com
Hola, por favor te recomiendo que publiques a todos las respuestas q te pidan
ResponderEliminarMe hackearon y perdí el acceso al blog hasta ahora. Bueno suerte
EliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarComo podríamos agregar una línea al histograma?
ResponderEliminarTengo un histograma con una distribución uniforme y quiero agregar la frecuencia esperada.
Algo así:
http://oi50.tinypic.com/27xpelz.jpg
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
EliminarHola Hero! encontraste como hacerlo?, en un foro en ingles vi que uno hablaba de usar anotaciones, pero 0 idea como se usan
Eliminarme pordrias regalar los dos plugin es que descargo los dos paquetes pero no encuentro los .jar...
ResponderEliminargracias
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
EliminarHola 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