Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: sionoo en 12 Junio 2010, 21:26 pm



Título: Grafica de barras (no scripts de terceros)
Publicado por: sionoo en 12 Junio 2010, 21:26 pm
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
  1. <?php
  2.  
  3. $datay = array(2,3,-5,5,3);//datos
  4.  
  5. $barras  = count($datay);//total de barras
  6.  
  7. //Ancho y Alto de la imagen
  8. $width = 250;
  9. $height = 150;
  10.  
  11. $espacio = 5; //separacion entre barras
  12.  
  13. //ancho de las barras
  14. $barras_width = $width / $barras ;
  15.  
  16. //[b]$mas = 160;[/b]
  17.  
  18. $im        = imagecreate($width,$height[b]/*+$mas*/[/b]);//se crea imagen
  19. $lime      = imagecolorallocate ($im,154,205,50);
  20. $gray_lite = imagecolorallocate ($im,0xee,0xee,0xee);
  21. $gray_dark = imagecolorallocate ($im,0x7f,0x7f,0x7f);
  22. $white     = imagecolorallocate ($im,0xff,0xff,0xff);
  23.  
  24. //color de fondo de la imagen (gris)
  25. imagefilledrectangle($im,0,0,$width,$height[b]/*+$mas*/[/b],$gray_lite);
  26.  
  27. //Obtener el valor maximo de todo el arreglo de datos
  28. $maxv = 0;
  29. for($i=0;$i<$barras;$i++)
  30. $maxv = max($datay[$i],$maxv);
  31.  
  32. //generar cada barra y mostrala en pantalla
  33. for($i=0;$i<$barras;$i++){
  34. $barras_height = ($height / 100) * (( $datay[$i] / $maxv) *100);
  35.  
  36. $x1 = ($i)*$barras_width; //coordenada X del punto 1
  37. $y1 = $height-$barras_height; //coordenada Y del punto 1
  38. $x2 = (($i+1)*$barras_width)-$espacio; //coordenada X del punto 2
  39. $y2 = $height; //coordenada Y del punto 2
  40.  
  41. //se rrellenan las barras con un fondo color verde limon
  42. imagefilledrectangle($im,$x1,$y1,$x2,$y2,$lime);
  43. }
  44.  
  45. header ("Content-type: image/png");//cabecera para generar la imagen (PNG)
  46. imagepng($im);
  47. imagedestroy($im);//se libera la memoria utilizada por la imagen
  48. ?>

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.
(http://r.i.elhacker.net/cache?url=http://i47.tinypic.com/2z843uu.jpg)

CON aumeto de altura.
(http://r.i.elhacker.net/cache?url=http://i50.tinypic.com/2akb2b.jpg)

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.


Título: Re: Grafica de barras (no scripts de terceros)
Publicado por: Servia en 15 Junio 2010, 10:36 am
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.