Graficas Con Java y JFreeChart
Graficas Con Java y JFreeChart
Graficas Con Java y JFreeChart
Fuente: http://jc-mouse.blogspot.mx/2010/04/graficas-con-java-y-jfreechart.html
Descarga del archivo:
En esta ocasion les presento un codigo para crear graficas en java con la libreria OpenSource jFreeChart,
esta libreria nos permite crear todo tipo de graficas como se puede ver en la imagen de abajo
Puedes descargarte la libreria desde la pagina del proyectohttp://www.jfree.org/jfreechart/,
INSTALACION
1. Una vez que descargaste el archivo ZIP, debes descomprimirlo en algun lugar del disco duro, por ejemplo
en c:/java/librerias/jfreechart-1.0.13
2. Con netbeans abierto, dirigete a TOOLS - LIBRARIES o a HERRAMIENTAS - LIBRERIAS.
3. En la ventana que aparece le das a "new library.." y te mostrara una pequea ventana, en esa ventana le
das un nombre a la libreria para poder reconocerla despues, yo le puse "graficos", tu puedes colocar el
nombre que desees.
4. Presionas el boton AADIR JAR y buscas los siguientes archivos jfreechart-1.0.13 y jcommon-1.0.16 y los
aades uno por uno, despues presionas OK y listo
EL PROYECTO EN NETBEANS
1. Crea un nuevo proyecto en netbeans llamalo "graficas", luego debes aadir las librerias al proyecto, clic
derecho sobre la carpeta "libraries" como se ve en la imagen y escoges Add Library, en la ventana que
aparece, busca la libreria, en mi caso la llameGRAFICAS, asi que busco ese nombre y le digo Add Library
Si seguiste todos los pasos, debes tener algo como la imagen de abajo:
2. Ahora crea un nuevo JFrame en el proyecto, aade un JPanel: CONTENEDOR, dos JButton CREAR Y
GUARDAR y situalos como se ve en la imagen:
3. Crea una nueva clase, "Grafico.java" y aade el siguiente codigo:
import java.awt.Dimension;
import java.awt.image.BufferedImage;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.*;
import java.io.*;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import org.jfree.chart.ChartUtilities;
import org.jfree.data.category.DefaultCategoryDataset;
/**
* @web http://jc-mouse.blogspot.com/
* @author Mouse
*/
public class grafico {
private BufferedImage _image ;//para la imagen en memoria
private JFreeChart grafico ;// el grafico
private Dimension d;//dimension del grafico
public grafico(){
}
/* Crea el grafico */
public void crear_grafico_de_barras(Dimension d, int[] v, String[] arg1,
String arg2[],String[] data){
this.d= d;
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
//se llenan los datos
for(int i=0; i<=v.length-1;i++){
dataset.setValue(v[i], arg1[i], arg2[i]);
}
//se crea el grafico
grafico = ChartFactory.createBarChart3D(data[0], data[1], data[2],
dataset, PlotOrientation.HORIZONTAL , true, false, true);
//se coloca el grafico en memoria
_image = grafico.createBufferedImage(this.d.width,this.d.height);
System.err.println("grafico creado");
}
/* carga la imagen que esta en memoria en el objeto jLabel */
public void cargar_grafico(JLabel lb){
ImageIcon imagenFondo = new ImageIcon(_image);
lb.setIcon(imagenFondo);
lb.repaint();
}
/* presenta la ventana de dialogo "guardar" y salva el grafico generado en
JPG */
public void Guardar(){
JFileChooser fileChooser = new JFileChooser();
int result = fileChooser.showSaveDialog(null);
if ( result == JFileChooser.APPROVE_OPTION ){
try {
//se obtiene la direccion donde se guardara la imagen
String url = fileChooser.getSelectedFile().toString();
//Se guarda la imagen
ChartUtilities.saveChartAsJPEG(new File(url + ".jpg"), grafico,
d.width, d.height);
} catch (IOException ex) {
Logger.getLogger(grafico.class.getName()).log(Level.SEVERE, null,
ex);
}
}
}
}
4. Como siguiente paso, debes implementar esta clase en el JFrame, el codigo para los JButton es el
siguiente
private void CREARActionPerformed(java.awt.event.ActionEvent evt) {
//tamao del grafico
Dimension d = CONTENEDOR.getSize();//toma el tamao del contenedor
//se crean los datos
int[] valores = {1000,2011,3030,1569,2688,4587};
String[] arg1 = {"Enero","Febrero","Marzo","Enero","Febrero","Marzo"};
String[] arg2 = {"Visitas","Visitas","Visitas","Hits","Hits","Hits"};
//titulo, lateral 1, lateral 2
String[] data = {"Blog de Mouse","Primer Trimestre","Visitas"};
//se crea el grafico
migrafico.crear_grafico_de_barras(d, valores, arg2, arg1, data);
//se crea un jlabel para colocar el grafico
JLabel j = new JLabel();
j.setBounds(0, 0, d.width, d.height);
//se carga el grafico de memoria
migrafico.cargar_grafico(j);
//se aade al contenedor
CONTENEDOR.add(j);
this.repaint();
}
private void GUARDARActionPerformed(java.awt.event.ActionEvent evt) {
migrafico.Guardar();
}
/**
* @param args the command line arguments
*/
grafico migrafico = new grafico();
La forma en que se pasa los parametros a la clase "graficos.java", es mediante el uso de Array, se utilizan 4
array, un array de enteros para pasar los valores numericos, otros dos array de tipo String arg1 y arg2, donde
se coloca los valores sobre los cuales se llevara a cabo la comparacion y agrupacion de datos, estos tres
primeros array, deben tener la misma longitud, por ultimo un array de tipo String de 3 elementos en el cual se
coloca, primero el titulo, seguidos del texto que se coloca en los lateras del grafico; por ejemplo,
int[] valores = {1000,2011,3030,1569,2688,4587};, se le esta pasando un array con 6 elementos, entonces los
arrays arg1 y arg2 , deben tener tambien seis elementos.
En el ejemplo de abajo, tenemos el mismo grafico, con los mismos datos, pero con diferente agrupacion, el
primero agrupado entre "visitas y hits" y el segundo entre "meses", esto solamente se hizo, inviertiendo
"arg1" y "arg2" en la llamada al metodo crear_grafico_de_barras();