martes, 31 de mayo de 2011

Ejemplo 4: Gráfico de Barras y Personalización de un Chart

Archivo PNG generado


package jfree;

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.data.category.DefaultCategoryDataset;

public class BarChart {

public static void main(String[] args) throws IOException {
// TODO code application logic here
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.setValue(5, "jalados", "José");
dataset.setValue(5, "jalados", "Ronny");
dataset.setValue(4, "jalados", "Frank");
dataset.setValue(2, "jalados", "Sumire");
dataset.setValue(0, "jalados", "Maribel");
dataset.setValue(-1, "jalados", "Ian");
dataset.setValue(10, "aprobados", "José");
dataset.setValue(9, "aprobados", "Ronny");
dataset.setValue(12, "aprobados", "Frank");
dataset.setValue(13, "aprobados", "Sumire");
dataset.setValue(15, "aprobados", "Maribel");
dataset.setValue(12, "aprobados", "Ian");
JFreeChart chart = ChartFactory.createBarChart3D("Nivel de ignorancia",
"Estudiantes", "Cursos jalados",
dataset, PlotOrientation.VERTICAL, true, true, false);
BufferedImage img = ImageIO.read(new File("src/img/cars.jpg"));
chart.setBackgroundImage(img);
CategoryPlot plot = chart.getCategoryPlot();
plot.setBackgroundImage(img);
BarRenderer render = (BarRenderer)plot.getRenderer();
render.setSeriesPaint(0, Color.darkGray);
render.setSeriesPaint(1, Color.LIGHT_GRAY);
chart.setBackgroundPaint(Color.RED);
try{
ChartUtilities.saveChartAsPNG(new File("C:\\barras.png"), chart, 500, 400);
}
catch(IOException e){
System.out.println("Error al crear el archivo");
}
ChartFrame frame = new ChartFrame("Gráfico de Barras", chart);
frame.pack();
frame.setVisible(true);
}
}


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

lunes, 30 de mayo de 2011

Ejemplo 3: Colocando una imagen de fondo a nuestro Chart



Después de haber instalado las librerías en el proyecto(Ejemplo 1).
Creamos un objeto image para almacenar una imagen
BufferedImage img = ImageIO.read(new File("src/img/camaleon.jpg"));

agregamos a nuestro chart usando setBackgroundImage que nos pide como parámetro un objeto image
chart.setBackgroundImage(img);
y el resultado es este...



Ahora no se vé muy bien, pero también podemos colocar una imagen al plot de la misma forma que lo hicimos con el chart
plot.setBackgroundImage(img);

si queremos difuminar las barras del histograma para que se vea el ojo del camaleón


Ahora sólo nos queda ver el vídeo.


package jfree;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
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) throws IOException {
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) throws IOException {
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);

BufferedImage img = ImageIO.read(new File("src/img/camaleon.jpg"));
chart.setBackgroundImage(img);
plot.setBackgroundImage(img);
plot.setForegroundAlpha(0.5f);

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() throws IOException {
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);
}
}








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

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

jueves, 26 de mayo de 2011

Ejemplo 2: Gráfico XYline

Para poder crear los archivos jpg o png usa el win xp, en el 7 no funcionó. Si alguien sabe como , avise.

package jfree;

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

/**
*
* @author admin
*/
//imports pastel
import java.io.File;
import java.io.IOException;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

public class Main {

public static void main(String[] args) {
//Gráfico xy
XYSeries series = new XYSeries("XY gráfico");
series.add(1, 1);
series.add(1, 2);
series.add(2, 5);
series.add(4, 3);
series.add(5, 4);
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series);
JFreeChart chart = ChartFactory.createXYLineChart("Gráfico XY", "Eje x", "Eje y", dataset, PlotOrientation.VERTICAL, true, true, false);
ChartFrame frame = new ChartFrame("Mi segundo chart", chart);
frame.pack();
frame.setVisible(true);
try{
ChartUtilities.saveChartAsJPEG(new File("C:\\xy.jpg"), chart, 500, 300);
}
catch(IOException e){
System.out.println("Error al abrir el archivo");
}

}

}




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

domingo, 22 de mayo de 2011

Ejemplo 1: Gráfico de Pastel y creación de un JPEG del gráfico


El archivo JPEG creado

package jfree;


//imports pastel
import java.io.File;
import java.io.IOException;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.ChartUtilities;
import org.jfree.data.general.DefaultPieDataset;

public class Main {

public static void main(String[] args) {
// TODO code application logic here
double cat1 = 2.4;
double cat2 = 4.4;
double cat3 = 6.7;
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("Categoría 1", cat1);
data.setValue("Categoría 2", cat2);
data.setValue("Categoría 3", cat3);

JFreeChart chart = ChartFactory.createPieChart3D("Gráfico", data, true, true, true);

try{
ChartUtilities.saveChartAsJPEG(new File("C:\\pie.jpg"), chart, 500, 300);
}
catch(IOException e){
System.out.println("Error al abrir el archivo");
}

ChartFrame frame = new ChartFrame("Mi primer chart", chart);
frame.pack();
frame.setVisible(true);
}

}



martes, 10 de mayo de 2011

Instalando Librerías de JFreeChart correctamente

Lo primero que debemos de hacer es descargar la librería JFreeChart y el JCommon desde este enlace
Por las dudas aquí está el enlace del JCommon que los descargamos aquí
después sólo nos queda agregarlo al NetBeans(ya salió el 7), lo vemos en el vídeo.
Lo que hacemos es agregar los jar's del jcommon y jfreechart al NetBeans, luego creamos un nuevo proyecto y le agregamos las librerías.