JPGraph y Periodo de fechas

Cuando queremos generar gráficas, queremos que estas sean en función de periodo de tiempo y lo ideal es que ese periodo se genere una escala automática, es decir, si el periodo es corto la escala debería de estar en horas, minutos o incluso segundos, si la escala es mayor debería ser por días, como también años.

La libreria JPGraph escala las fechas por nosotros pero debemos dejarla para que la procese en formato timestamp, y se hace de la siguiente manera:

require_once("jpgraph/jpgraph.php");
require_once(
"jpgraph/jpgraph_line.php");
require_once(
"jpgraph/jpgraph_date.php");

$data=array();
$xdata=array();

// Generamos un periodo de fecha para convertir

$data[0]="2007-12-22 01:00:00";
$data[1]="2007-12-23 01:00:00";
$data[2]="2007-12-24 01:00:00";
$data[3]="2007-12-25 01:00:00";
$data[4]="2007-12-26 01:00:00";
$data[5]="2007-12-27 01:00:00";
$data[6]="2007-12-28 01:00:00";
$data[7]="2007-12-29 01:00:00";
$data[8]="2007-12-30 01:00:00";

for ($i;$i<count($data);$i++) {
// Se debe separar la fecha para luego poder convertirla a timestamp
list($ano,$mes,$dia,$hora,$minuto,$segundo,)=split('[-, ,:]',$data[$i]);
// La funcion mktime() requiere por cada elemento de la fecha especifica para poder convertirla
$xdata[$i]=mktime($hora,$minuto,$segundo,$mes,$dia,$ano);
}


// Luego basta crear la escala de datos
$mayor=max($data);
$minimo=min($data);

// Teniendo las fechas ya formateadas, ya nos sirve de insumo para la grafica
$graph = new Graph(650,350);
$graph
->SetMargin(40,40,30,130);
$graph->SetScale('datlin',$minimo,$mayor);
$graph->title->Set("Grafica");

$graph->xaxis->SetLabelAngle(90);

$line = new LinePlot($data,$xdata);

$line->SetFillColor('lightblue@0.5');
$graph->Add($line);
$graph->Stroke();

El resultado se puede ver parecido a este ejemplo que tengo en mi aplicación




Comentarios (3)

3 Response to "JPGraph y Periodo de fechas"

  1. Josué Fredes says:
    martes, febrero 10, 2009

    Gracias!

    Me funcionó perfecto.

    Mi aporte es que si están sacando las fechas de una DB , pueden ocupar la función strtotime, que convierte a timestamp.

  2. Jorge Elorza says:
    jueves, septiembre 10, 2009

    Josué, Daniel:
    He instalado la librería de JsGraph y el ejemplo no me funciona, me marca
    Warning: require_once(../jpgraph.php) [function.require-once]: failed to open stream: No such file or directory in C:\AppServ\www\grafica\jpgraph3\Examples\demo_line_date.php on line 2
    Fatal error: require_once() [function.require]: Failed opening required '../jpgraph.php' (include_path='.;C:\php5\pear') in C:\AppServ\www\grafica\jpgraph3\Examples\demo_line_date.php on line 2
    Todo está en su lugar y la línea de código que señala es:

    require_once("jpgraph_line.php");

    Espero me puedan ayudar.

    SALUDOS Y GRACIAS.

  3. Daniel Alberto says:
    jueves, septiembre 10, 2009

    @ Jorge Elorza:

    Supongo que tienes problema con la ruta relativa donde esta ubicada la libreria que invocas mediante require_once().

    Saludos