Grafica de barras (no scripts de terceros)

Iniciado por sionoo, 12 Junio 2010, 21:26 PM

0 Miembros y 1 Visitante están viendo este tema.

sionoo

hola, que tal.

Necesito su ayuda, no llevo mucho trabajando ocn PHP y me pidieron que realizara un sistema que mostrara los resultados en tablas y graficos. Con las tablas no tengo problemas pero con las graficas si.

Me podrian dar un ejemplo de como crearlas??? por favor, lo primero que hice fue usar la libreria jpgraph pero como el sistema sera de uso comercial tendriamos que comprar la licencia y es lo que no queremos (aumetar costos).

Me encontre con un pequeño script que genera graficos es muy basico pero me esta ayudando a utilizarar la libreria GD de PHP, lo adecua a mis necesitades y lo tengo asi.

Código (php) [Seleccionar]
<?php

$datay 
= array(2,3,-5,5,3);//datos

$barras  count($datay);//total de barras

//Ancho y Alto de la imagen
$width 250;
$height 150;

$espacio 5//separacion entre barras

//ancho de las barras
$barras_width $width $barras ;

//[b]$mas = 160;[/b]

$im        imagecreate($width,$height[b]/*+$mas*/[/b]);//se crea imagen
$lime      imagecolorallocate ($im,154,205,50);
$gray_lite imagecolorallocate ($im,0xee,0xee,0xee);
$gray_dark imagecolorallocate ($im,0x7f,0x7f,0x7f);
$white     imagecolorallocate ($im,0xff,0xff,0xff);
    
//color de fondo de la imagen (gris)
imagefilledrectangle($im,0,0,$width,$height[b]/*+$mas*/[/b],$gray_lite);
    
//Obtener el valor maximo de todo el arreglo de datos
$maxv 0;
for(
$i=0;$i<$barras;$i++)
$maxv max($datay[$i],$maxv);

//generar cada barra y mostrala en pantalla
for($i=0;$i<$barras;$i++){
$barras_height = ($height 100) * (( $datay[$i] / $maxv) *100);

$x1 = ($i)*$barras_width; //coordenada X del punto 1
$y1 $height-$barras_height; //coordenada Y del punto 1
$x2 = (($i+1)*$barras_width)-$espacio; //coordenada X del punto 2
$y2 $height; //coordenada Y del punto 2

//se rrellenan las barras con un fondo color verde limon
imagefilledrectangle($im,$x1,$y1,$x2,$y2,$lime);
}

header ("Content-type: image/png");//cabecera para generar la imagen (PNG)
imagepng($im);
imagedestroy($im);//se libera la memoria utilizada por la imagen
?>


Funciona perfectamente con valores positivos, pero cuando se introducen valores negativos no se grafican (o no se greficaban). Para graficarlos se aumenta la altura (descomentando lo de negritas) pero necesito hacerlo automatico que grafique tanto valores positivos como negativos.

Asi es como se ve la grafica, es algo sencilla pero me esta ayudando.

SIN aumentar altura.


CON aumeto de altura.


Alguna idea de como realizar las graficas con la libreria GD o sin ella pero sin librerias con licencias, por que estar aumentando los tamaños no seria la opcion final ya que tendria graficas de distintos tamaños.

Otra cosa es como mostrar los ejes X , Y (valores como en excel).

------Edito

Lo siento se me olvido decir que los datos ($datay) los obtengo de una BD MySQL, para el ejemplo solo puse un arreglo de 5 valores.

Servia

#1
Puede que esto te sirva:
http://www.terrill.ca/design/vertical_bar_graphs/

Es para hacer gráficos de barras verticales con PHP y CSS, mucho mejor que no una librería.

http://renownedmedia.com/codevault/NucleoGraph

Esta otra perece ser mejor.