GRAFICO BARRAS PARA ENCUESTA

baterino
30 de Septiembre del 2005
Hola, estoi tratando de hacer una encuesta en un jsp, pero nose como hacer el grafico de barras que me muestre el resultado de la encuesta. Como lo hago?, que herramienta debo ocupar para hacer el grafico?como le paso los parametro?

Eso muchas gracias....Saludos

nicokiki
30 de Septiembre del 2005
Hola!!!

Busca JFreeChart. Es muy bueno para eso. En el sitio hay mil ejemplos. Los podes hacer fisicamente a los archivos en el servidor o podes hacerlos "dinamicamente" y mostrarlos en un applet.

Salu2!!!!!

nicokiki
30 de Septiembre del 2005
Hola!!!

Te mando un ejemplo de una clase q genera archivos fisicos. No esta super bien ... pero andaba en TELECOM en su momento, y hoy se usa.... si ven esto me matan, pero como lo hice yo me pertenece o no?? jejejej

package ar.com.tecosoft.svdweb.grafico;

import java.awt.Color;
import java.io.File;

import org.jfree.chart.*;
import org.jfree.chart.plot.*;
import org.jfree.chart.renderer.BarRenderer;
import org.jfree.data.*;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.entity.StandardEntityCollection;

import ar.com.tecosoft.commonlib.logueo.TecoLogger;
import ar.com.tecosoft.commonlib.logueo.TecoLoggerException;

/** Clase que genera tres archivo JPEG. Uno es un grafico de barras y el otro de torta
* @author ngonzalez */
public class GeneradorGraficos {
private String[] textosArray;
private String[] valoresArray;
private String nombreArchivo;

private TecoLogger logger;


/** Constructor por default
* @param textos Textos separados por ;
* @param valores Valores separados por ;
* @param nombreArchivo Nombre del archivo con path incluido
* @param tituloGrafico Titulo a mostrar en el grafico */
public GeneradorGraficos( String textos,
String valores,
String nombreArchivo) {
this.textosArray = textos.split(";");
this.valoresArray = valores.split(";");
this.nombreArchivo = nombreArchivo;

try {
logger = TecoLogger.getLogger(this.getClass());
}
catch (TecoLoggerException e1) {
e1.printStackTrace();
}

}

/** Metodo que genera tres garficos. Uno de torta, de barras horizontal y vertical. Los nombres de los archivos seran formados
* en el Action invocador, pero los tres graficos seran lo obtenido + "_barras_horizontal.jpg" + "_barras_vertical.jpg" +
* "_torta.jpg".
* @param textos Textos de los valores recibidos separados por ;
* @param valores Valores recibidos separados por ;
* @param nombreArchivo Nombre del archivo con path incluido
* @throws Arroja uan java.lang.Exception */
public void generarGraficos() throws Exception{

try {
generarGraficoDeBarras();
generarGraficoDeTorta();
}
catch (Exception ex) {
logger.error("generarGraficos()", "Excepcion generando graficos");
throw new Exception(ex.getMessage());
}

}

/** Metodo que guarda en un archivo el grafico JPEG de tortas */
private void generarGraficoDeTorta() throws Exception {
final PieDataset data = createPieDataset(this.textosArray, this.valoresArray);
final JFreeChart chartTorta = ChartFactory.createPieChart( "Gráfico de Torta",
data,
true,
true,
true);

chartTorta.setBackgroundPaint(Color.GRAY);
PiePlot plot = (PiePlot) chartTorta.getPlot();
plot.setNoDataMessage("No hay datos disponibles");
plot.setCircular(false);
plot.setBackgroundPaint(Color.LIGHT_GRAY);

try {
ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
logger.debug("generarGraficoDeTorta()", "Antes de guardar al archivo");
ChartUtilities.saveChartAsJPEG(new File(nombreArchivo + "_torta.jpg"), 1, chartTorta, 600, 400);
logger.info("generarGraficoDeTorta()", "Guardo el archivo a " + nombreArchivo + "_torta.jpg");
}
catch (Exception e) {
logger.error("generarGraficoDeTorta()", "Error al generar el archivo JPG de barras");
logger.error("generarGraficoDeTorta()", e.toString());
throw new Exception("Error al generar el archivo JPG");
}

}

/** Metodo que guarda los dos archivos JPEG de torta */
private void generarGraficoDeBarras() throws Exception {

DefaultCategoryDataset data = createBarChart3DDataSet();

JFreeChart chartHorizontal = ChartFactory.createBarChart3D( "Gráfico de Barras Horizontal",
"Categorías",
"Valores",
data,
PlotOrientation.HORIZONTAL,
true,
false,
false);

chartHorizontal.setBackgroundPaint(Color.GRAY);
CategoryPlot plot = chartHorizontal.getCategoryPlot();
plot.setBackgroundPaint(Color.lightGray);
plot.setDomainGridlinePaint(Color.white);
plot.setDomainGridlinesVisible(true);
plot.setRangeGridlinePaint(Color.white);

final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

BarRenderer renderer = (BarRenderer) plot.getRenderer();
renderer.setDrawBarOutline(false);

JFreeChart chartVertical = ChartFactory.createBarChart3D( "Gráfico de Barras Vertical",
"Categorías",
"Valores",
data,
PlotOrientation.VERTICAL,
true,
false,
false);

chartVertical.setBackgroundPaint(Color.GRAY);
CategoryPlot plotVert = chartVertical.getCategoryPlot();
plotVert.setBackgroundPaint(Color.lightGray);
plotVert.setDomainGridlinePaint(Color.white);
plotVert.setDomainGridlinesVisible(true);
plotVert.setRangeGridlinePaint(Color.white);

// set the range axis to display integers only...
final NumberAxis rangeAxisVert = (NumberAxis)plotVert.getRangeAxis();
rangeAxisVert.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

// disable bar outlines...
BarRenderer rendererVert = (BarRenderer)plotVert.getRenderer();
rendererVert.setDrawBarOutline(false);

try {
ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
logger.debug("generarGraficoDeBarras()", "Antes de guardar al archivo");
ChartUtilities.saveChartAsJPEG(new File(nombreArchivo + "_barras_horizontal.jpg"), 1, chartHorizontal, 600, 400);
ChartUtilities.saveChartAsJPEG(new File(nombreArchivo + "_barras_vertical.jpg"), 1, chartVertical, 600, 400);
logger.info("generarGraficoDeBarras()", "Guardo el archivo a " + nombreArchivo + "_barras_horizontal.jpg");
logger.info("generarGraficoDeBarras()", "Guardo el archivo a " + nombreArchivo + "_barras_vertical.jpg");
}
catch (Exception e) {
logger.error("generarGraficoDeBarras()", "Error al generar el archivo JPG de barras");
logger.error("generarGraficoDeBarras()", e.toString());
throw new Exception("Error al generar el archivo JPG");
}
}


/** Metodo que crea en si el grafico de torta
* <h1>Metodo copiado del applet</h1>
* @author Autor del metodo del applet */
private PieDataset createPieDataset(String[] textos,String[] valores){
final double[][] data = new double[valores.length][valores.length] ;

for (int i=0;i<valores.length;i++){
for (int j=0;j<valores.length;j++){
data[i][j] = new Double(valores[i]).doubleValue();
}
}

String[] args0 = textos;
String[] args1 = textos;

return DatasetUtilities.createPieDatasetForColumn(DatasetUtilities.createCategoryDataset(args0,args1, data),0);

}

/** Metodo que crea en si el grafico de barras 3D
* <h1>Metodo copiado del applet</h1>
* @author Autor del metodo del applet */
private DefaultCategoryDataset createBarChart3DDataSet() {

DefaultCategoryDataset dataset = new DefaultCategoryDataset();
for (int i=0;i<this.valoresArray.length;i++){
dataset.addValue(new Double(this.valoresArray[i]).doubleValue(), "", this.textosArray[i]);
}

return dataset;
}

}