viernes, 22 de abril de 2011

Libreria Jpgraph con Mysql en PHP

Desarrollando una aplicacion Web me tope con una librería capaz de graficar los puntos que le demos con diferentes formas de mostrar estadísticas.
la librería se llama jpgraph
la puedes obtener desde


bueno vamos al grano, la idea que quiero presentar es : obtener datos desde una BD Mysql

y poder realizar una estadística

las variables donde se guarda los puntos son :

$datay1,$datay2,$datay3, $datayN, etc ...

bueno para que me entiendan coloco el code de uno de los ejemplos que trae la librería:

SetScale("textlin");

$graph->SetMargin(200,200,200,200);

$theme_class=new VividTheme;




$graph->yaxis->HideZeroLabel();

$graph->ygrid->SetFill(true,'#EFEFEF@0.5','#BBCCFF@0.5');

$graph->xgrid->Show();

$graph->SetTheme($theme_class);

$graph->img->SetMargin(80,30,30,40);

$graph->title->Set('Mensajes BPServer');

$graph->yaxis->title->SetFont(FF_FONT2,FS_BOLD);

$graph->xaxis->title->Set('Hora');

$graph->yaxis->title->Set('Mensajes'); // nombre del eje Y plano cartesiano

$graph->SetBox(false);




$graph->yaxis->title->SetFont( FF_FONT1 , FS_BOLD );

$graph->xaxis->title->SetFont( FF_FONT1 , FS_BOLD );

$graph->img->SetAntiAliasing(true);




$graph->yaxis->HideZeroLabel(true);

$graph->yaxis->HideLine(false);

$graph->yaxis->HideTicks(false,false);




$graph->xgrid->Show();

$graph->xgrid->SetLineStyle("solid");

$graph->xaxis->SetTickLabels(array('06:00','','08:00','','10:00','','12:00','','14:00','','16:00','','18:00','','20:00','','22:00'));

$graph->xgrid->SetColor('#E3E3E3');




// Create the first line

$p1 = new LinePlot($datay1);

$graph->Add($p1);

$p1->SetColor("#9495ED");

$p1->SetLegend('READ');







// Create the second line

$p2 = new LinePlot($datay2);

$graph->Add($p2);

$p2->SetColor("#B25522");

$p2->SetLegend('SENT');




// Create the third line

$p3 = new LinePlot($datay3);

$graph->Add($p3);

$p3->SetColor("#FF1493");

$p3->SetLegend('T001');




// Create the fourth line

$p4 = new LinePlot($datay4);

$graph->Add($p4);

$p4->SetColor("#FF1441");

$p4->SetLegend('T002');



$graph->legend->SetFrameWeight(3);



// Output line

$graph->Stroke();
?>

un ejemplo sencillo y completo.

ahora veremos un ejemplo mas practico y de un nivel un poco mas elevado

la idea sera:
- Obtener la cantidad de ocurrencias para los registros de SENT,READ,TO01 yTO02 que esten entre los rangos 60000 y 220000 dentro de la base de datos, cabe destacar que 60000 y 220000 corresponde horas, es decir 60000 es igual a 6:00 como 220000 es a 22:00 Hrs (para mayor comodidad del lector).

cod3:

require('jpgraph/jpgraph.php');
require('jpgraph/jpgraph_line.php');

$matriz[1]="\"READ\"";
$matriz[2]="\"SENT\"";
$matriz[3]="\"TO01\"";
$matriz[4]="\"TO02\"";
$table=$_SESSION['table'];
$conexion=mysql_connect($server, $user, $pass) or
die("Error en conexion con motor".mysql_error());
mysql_select_db($bbdd,$conexion) or
die("Fallo al selecionar la BBDD");
//array para read sent TO01 y TO02
$i=0;

foreach($matriz as $key => $value){
$x=1;
for($i=60000;$i<=220000;$i=$i+10000){
$aux=$i+10000;
$x++;
$consulta=mysql_query("Select count(*) as total from ".$table." where hora >".$i." and hora < ".$aux." and status =".$value,$conexion); // sumatoria de las ocurrencias

if ($file = mysql_fetch_array($consulta)){
// asignando resultados
if($key==1)
$datay1[$x] = $file["total"];
if($key==2)
$datay2[$x] = $file["total"];
if($key==3)
$datay3[$x] = $file["total"];
if($key==4)
$datay4[$x] = $file["total"];
}
}
}
...setup graph ...

de esta manera obtenemos podemos obtener lo siguiente:



2 comentarios:

  1. saludos buenos dias estoy estudiando informatica y me pudieron realizar una grafica cuyos valores sean llamados desde una base de datos, me e guiado por lo que tu hacer pero no entiendo en que momento haces la conexion a la base de datos, en el llamado como haces las consulta para que puedan esos valores ser reflejados en la graficas me puedes orientar mas.

    ResponderEliminar
  2. Esto es algo viejo, y era muy joven xd , si aún necesitas ayuda favor contactame a ncwapuntes@gmail.com . saludos

    ResponderEliminar