Gráfica lineal y de barras en PHP

por

Cuando desarrollamos nuestra páginas web, nos interesa poder generar ciertas estadísticas sobre los datos que nosotros queramos, como pueden ser el número de visitas o la tasa de descargas. Por lo general, toda estadística va acompañada de su gráfica representativa que nos muestra de una forma mucho más visual los resultados. Debido a esto, voy a enseñaros como podeis generar vuestros gráficos estadísticos con PHP, generando gráficas lineales o de barras.

Para ello, lo primero que debemos hacer es descargarnos dos librerías que nos proveerán de las funciones y herramientas necesarias para realizar las gráficas.

Estas dos librerías son Jpgraph y Jpgraph_line(Van las dos en el mismo archivo descargado). Para usarlas bastaría con incluirlas a través de un include en el código php de nuesta página como veremos un poco más adelante.

En este ejemplo que os voy a presentar generamos un código que nos permite elegir el tipo de gráfíca a generar dependiendo de una variable llamada "gráfica" enviada mediante el método GET.

El código PHP que nos lo generaría sería el siguiente:


<?php

$grafica=$_GET['grafica'];

switch($grafica){

case "lineal":

	include("./lib/jpgraph/src/jpgraph.php");
	include("./lib/jpgraph/src/jpgraph_line.php");
 
	$dataX=array(1,2,3,4,5,6,7,8,9,10,11,12);
	$dataY=array(12,2,5,20,1,7,10,12,17,3,4,18);
	$height=350;
	$width=300;
	$titulo="Grafica lineal";
	$tituloX="Datos X";
	$tituloY="Datos Y";
	$color="blue";
	$ydata = $dataY;
	$graph = new Graph($width, $height, "auto");    
	$graph->SetScale( "textlin");
	$graph->img->SetMargin(50, 50, 20, 50);
	$graph->title->Set($titulo);

	$xdata =$dataX;
	$graph->xaxis->SetTickLabels($xdata);
	$graph->xaxis->title->Set($tituloX);

	$graph->yaxis->title->Set($tituloY);
	 
	$lineplot = new LinePlot($ydata);
	$lineplot->SetColor($color);
	 
	$graph->Add($lineplot);
	$graph->Stroke(); 

	break;
	
case "barras":

	include("./lib/jpgraph/src/jpgraph.php");
	include("./lib/jpgraph/src/jpgraph_bar.php");

	$dataX=array(1,2,3,4,5,6,7,8,9,10,11,12);;
	$dataY=(12,2,5,20,1,7,10,12,17,3,4,18);
	$height=350;
	$width=300;
	$titulo="Grafica lineal";
	$tituloX="Datos X";
	$tituloY="Datos Y";
	$color="blue";
	
	$ydata = $dataY;
	$graph = new Graph($width, $height, "auto");    
	$graph->SetScale("textlin");
	$xdata =$dataX;
	$graph->xaxis->SetTickLabels($xdata);
	$graph->img->SetMargin(50, 50, 20, 50);
	$graph->title->Set($titulo);
	$graph->xaxis->title->Set($tituloX );
	$graph->yaxis->title->Set($tituloY );
	 
	$barplot =new BarPlot($ydata);
	$barplot->SetColor($color);
	 
	$graph->Add($barplot);
	$graph->Stroke(); 
	
	break;
}

?>

Como vemos, podemos personalizar la gráfica en cierto grado a nuestro gusto. Podemos seleccionar el color de las barrasola linea, el título, tanto de la gráfica como de los ejes o el alto y ancho.

Los datos que queremos reflejar en la gráfica se establece mediante 2 arrays $dataX y $dataY que representan los datos X e Y respectivamente.

La llamada correspondiente a la generación de la gráfica se realizará mediante HTML y un ejemplo de ello sería el siguiente:


<div class='dibujo-grafica' align='center'>

<img src="Grafica.php?grafica=<?php echo $grafica; ?> " alt='grafico'/>

</div>

De este modo, la gráfica la generamos como si fuera una imagen más dentro de nuestra página HTML.

A partir de este punto podríamos generar gráficas con datos provenientes de nuestra Base de Datos, generando diferentes gráficas en función de los datos que queremos, de los meses que queramos o lo que nuestros clientes requieran.

Si teneis cualquier pregunta no dudeis en escribirme o poner vuestros comentarios.

Espero que os sea de utilidad.

COMENTARIOS

18-11-2013 18:15:22
Dime que te pasa exactamente a ver si encontramos porqué no te funciona ;)
18-11-2013 00:33:17
No me funciono, intente todo con las librerias y nada. No funka
17-04-2013 17:58:12
Gracias Daniel, me alegro que te haya servidor :)
17-04-2013 10:57:47
Hola Sergio González Barrios. Quería agradecerle por esta pagina tan excelente muy buen trabajo, me a servido de mucha ayuda. Gracias por tu tiempo y dedicación.
31-01-2013 21:15:29
@david, trata de asegurarte que tanto las rutas de inclusion de las librerías como los arrays de datos de las gráficas están bien ya que tu error parece que puede venir de un fallo en la programación, en los datos o en la integración de la libreria. Tu imagen no se está generando adecuadamente debido a alguna de estas opciones. Revísalo y me cuentas. Gracias por tu comentario :)
31-01-2013 15:58:00
problema al mostrar la grafica como imagen me sale como si estuviera mala la imagen
11-12-2012 18:10:20
Si te fijas, los nombres de las librerías en el tercer párrafo del artículo son enlaces a las páginas de las librerías. Están en azul :)
11-12-2012 01:02:48
amigo y donde descargo la librería: include("./lib/jpgraph/src/jpgraph.php"); include("./lib/jpgraph/src/jpgraph_line.php"); gracia spor tu ayuda
07-07-2011 23:55:15
Los atributos los mandas a través de un formulario? Porque si es así en tan simple como recojer esos atributos en la página php con un $atributo1=$_POST['name del atributo1']...$atributoN=$_POST['name del atributoN'] y con todos los atributos generas los arrays de dataX y dataY. Si los envias mediante GET el ejemplo de arriba ya esta recojiendo un atributo "gráfica" si te fijas. Tan solo deberias de recojer los atributos que tu quieras y componer el array de dataX y dataY. Si necesitas qe te ponga un ejemplo completo dímelo.
07-07-2011 20:42:07
Quiero que con ayuda de jpgraf sea capaz crerar graficos enviandole atributos en un metodo

DEJA TU COMENTARIO