sábado, 15 de diciembre de 2007

Gráficos estadisticos con bibliotecas php Libchart!!

libchart

Libchart se trata de una librería con licencia GPL escrita en php para usar con php4/php5.

Es una librería gráfica para generar imágenes al vuelo, es decir que podes calcular los valores que luego servirán de parámetros para generar una imagen.

Yo tuve que buscar algo que me sirviera para generar gráficos en base a cálculos estadísticos porque debía implementar un nuevo modulo para un proyecto ya en marcha que justamente hiciera eso, mostrar el resultado de encuestas realizadas.

Esta librería se puede usar tanto con php4 que ya va cayendo en desuso como con php5.

supongamos que la encuesta es .....
¿Consideras que las carreras de pregrado, grado y
postgrado que se dictan en Argentina responden a necesidades
actuales del mercado laboral?

y las respuestas obtenidas sean las siguientes
Respuestas:
Bastante : 54 %
Poco : 15 %
Mucho : 14 %
No sabe/ No contesta : 13 %
Nada : 4 %

Este es un código de un script que genera un gráfico circular, llamemos circular.php:

/** Indica el tamaño de imagen*/
$chart = new PieChart(500, 250);

/**Ingresa los valores para las porciones del gráfico */

$dataSet = new XYDataSet();
$dataSet->addPoint(new Point("Bastante :", 54));
$dataSet->addPoint(new
Point("Poco :", 15));
$dataSet->addPoint(new Point("Mucho :", 14));
$dataSet->addPoint(new Point("No sabe/ No contesta:", 13));
$dataSet->addPoint(new Point("Nada", 4 ));
$chart->setDataSet($dataSet);



/** Indica un titulo para el grafico*/

$chart->setTitle("¿Consideras que las carreras de pregrado, grado y
postgrado que se dictan en Argentina responden a necesidades
actuales del mercado laboral?");


/** Renderiza el gráfico */
$chart->render("generated/stats_circle.png");

y el resultado de todo esto se escribe en un archivo de imagen "generated/stats_circle.png" que se puede ver por browser o desde cualquier programa que interprete un archivo de imagen, aquí esta el resultado visto desde un browser.



Bueno, por supuesto que lo que mostré es lo básico que se puede hacer con un script que genera imágenes, debería ser un script mejor diseñado, pero da una idea de lo que se puede lograr con esta "herramienta" si uno desea lograr algún que otro gráfico estadístico. PEAR también tiene sus librerías, pero con esta librería que encontré me resulto muy fácil de utilizarla y pude lograr buenos resultados :-) . Esta es la página oficial de Libchart

Bueno, esto es todo amigos ... espero que les ayude esto o les de alguna buena idea de programación, este es mi aporte("granito de arena se dice!!!!"), hasta la próxima!!! ;-)

2 comentarios:

Damian dijo...

como se hace para poder lograr que el heje vertical empieze desde un valor estipulado y no de 0.

Cesar Díaz dijo...

Yo utilice esta librería para cálculos estadísticos y no necesitaba en ese momento comenzar con los ejes de coordenadas en un valor distinto de 0(cero) asi que como viene la librería preparada me sirvió para resolver el problema y hacer el programa.
En base a tu consulta me puse a ver los ejemplos que trae la librería para la versión libchart-1.1 que yo utilice en su momento(casi un año atras)

Te explico lo que hice paso a paso para que entiendas a la conclusión que llegue:

_ baje y descomprimi el paquete libchart-1.1.tar.gz desde http://naku.dohcrew.com/libchart/pages/download/

_ tome el ejemplo demo1.php tal cual esta. Es un gráfico de barras verticales, este script quedo intacto, busque y busque la forma de pasarle por parámetros el valor del eje vertical o el horizontal, pero no encontré la forma

_ buscando en las librerías di con el punto en la librería VerticalChart.php. Lo que pude ver es el método printAxis() en el cual setea los valores de comienzos de las coordenadas
En la linea 169 de este script da valor a la variable $minValue

printAxis(){

$minValue = $this->axis->getLowerBoundary();

}

lo modifique con un valor fijo

printAxis(){

$minValue = 100;

}

y resultó, el eje de valores comienza con un mínimo de 100 en vez de 0(cero).

Bueno, espero que te ayude en algo. Si encontras una buena forma de resolver esto me gustaría que lo escribas aquí!! ;-) Saludos