Foros del Web » Programando para Internet » PHP »

problema para graficar serie de tiempo con jpgraph

Estas en el tema de problema para graficar serie de tiempo con jpgraph en el foro de PHP en Foros del Web. hola amigos espero me puedan ayudar, la situación es la siguiente: requiero graficar aproximadamente 1000 registros los cuales los obtengo mediante una consulta a la ...
  #1 (permalink)  
Antiguo 30/07/2013, 15:02
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 14 años, 3 meses
Puntos: 6
problema para graficar serie de tiempo con jpgraph

hola amigos espero me puedan ayudar,

la situación es la siguiente: requiero graficar aproximadamente 1000 registros los cuales los obtengo mediante una consulta a la base de datos (postgresql).

Esta es la estructura de la tabla donde se guardan los registros
id serial
fecha date
hora time without time zone
temperatura real

ejemplo de un registro

id fecha hora temperatura
2 2013-07-23 17:23:04 -0.25

los registro tienen un minuto de diferencia.

el problema que tengo es como logro que en el eje de x aparezcan los valores de las horas y no los minutos.

esta es mi consulta
Código SQL:
Ver original
  1. SELECT * FROM anemometro WHERE fecha > now()-'24 hour'::INTERVAL;

hasta el momento este es mi código el cual es el ejemplo de jpgraph , como lo integro

Código PHP:
Ver original
  1. <?php // content="text/plain; charset=utf-8"
  2. require_once ('jpgraph/jpgraph.php');
  3. require_once ('jpgraph/jpgraph_line.php');
  4. require_once ('jpgraph/jpgraph_date.php');
  5.  
  6. // Create a data set in range (50,70) and X-positions
  7. DEFINE('NDATAPOINTS',360);
  8. DEFINE('SAMPLERATE',240);
  9. $start = time();
  10. $end = $start+NDATAPOINTS*SAMPLERATE;
  11. $data = array();
  12. $xdata = array();
  13. for( $i=0; $i < NDATAPOINTS; ++$i ) {
  14.     $data[$i] = rand(50,70);
  15.     $xdata[$i] = $start + $i * SAMPLERATE;
  16. }
  17.  
  18.  
  19. // Create the new graph
  20. $graph = new Graph(540,600);
  21.  
  22. // Slightly larger than normal margins at the bottom to have room for
  23. // the x-axis labels
  24. $graph->SetMargin(40,40,30,130);
  25.  
  26. // Fix the Y-scale to go between [0,100] and use date for the x-axis
  27. $graph->SetScale('datlin',0,100);
  28. $graph->title->Set("Example on Date scale");
  29.  
  30. // Set the angle for the labels to 90 degrees
  31. $graph->xaxis->SetLabelAngle(90);
  32.  
  33. $line = new LinePlot($data,$xdata);
  34. $line->SetLegend('Year 2005');
  35. $line->SetFillColor('[email protected]');
  36. $graph->Add($line);
  37. $graph->Stroke();
  38. ?>
  #2 (permalink)  
Antiguo 01/08/2013, 23:40
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 14 años, 3 meses
Puntos: 6
Respuesta: problema para graficar serie de tiempo con jpgraph

amigos tengo para graficare el ejex el del tiempo deacuerdo a los valores de la base de datos

yo requiero graficar como este ejemplo http://jpgraph.net/download/manuals/...teaxisex1.html


de esta manera consulto la base y construyo los arrays
Código PHP:
Ver original
  1. $usuario = 'postgres';
  2. $contrasenia = '****';
  3.    
  4.             try {
  5.                 $db = new PDO('pgsql:host=localhost;dbname=meteo',$usuario,$contrasenia);
  6.                 }catch(PDOException $e) {
  7.                 //echo $e->getMessage();
  8.                 echo "Usuario y Clave Invalidas";
  9.                 throw new Exception("Usuario y Clave Invalidas", 0, $e);
  10.                 }
  11.  
  12.  
  13. //$consulta = $db->prepare("SELECT fecha,temperatura,EXTRACT(epoch FROM fecha)AS fechas FROM anemometro");
  14. $consulta = $db->prepare("SELECT * FROM anemometro");
  15. $consulta->execute();
  16.  
  17.   while($fila = $consulta->fetch(PDO::FETCH_ASSOC))
  18.         {
  19.         $ydata[] = $fila['temperatura'];
  20.         $xdata[] = strtotime ($fila['fecha']);
  21.        
  22.         }
  23. //var_dump($xdata, $ydata);


el problema que tengo es para plotear el eje x donde estan las fechas.
  #3 (permalink)  
Antiguo 04/08/2013, 21:42
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 14 años, 3 meses
Puntos: 6
Problema con eje x en JpGraph

hola amigos espero me puedan ayudar.

tengo problemas con el eje x , se coloca un valor al final del ejex en este caso es un 2000

esta es la imagen del problema que tengo
http://imageshack.us/f/7/17zk.png/



este es el codigo con el cual genero la grafica.
Código PHP:
Ver original
  1. require_once ('jpgraph/jpgraph.php');
  2. require_once ('jpgraph/jpgraph_line.php');
  3.  
  4. $usuario = 'postgres';
  5. $contrasenia = '*****';
  6.    
  7.             try {
  8.                 $db = new PDO('pgsql:host=localhost;dbname=meteo',$usuario,$contrasenia);
  9.                 }catch(PDOException $e) {
  10.                 //echo $e->getMessage();
  11.                 echo "Usuario y Clave Invalidas";
  12.                 throw new Exception("Usuario y Clave Invalidas", 0, $e);
  13.                 }
  14.  
  15. $consulta = $db->prepare("SELECT * FROM anemometro");
  16. $consulta->execute();
  17.  
  18.  
  19. while($fila = $consulta->fetch(PDO::FETCH_ASSOC))
  20.         {
  21.           $xdata[] = substr($fila['hora'], 0, -3);
  22.           $ydata[] = $fila['temperatura'];
  23.         }
  24.  
  25. $graph = new Graph(800,250,'auto');
  26. $graph->SetScale('linlin');
  27. $graph->SetMargin(40,40,30,130);
  28.  
  29. $graph->title->Set('Temperatutra');
  30. $graph->title->SetFont(FF_ARIAL,FS_NORMAL,12);
  31. $graph->xaxis->SetPos('min');
  32. $graph->xaxis->SetLabelAngle(0);
  33. $graph->yaxis->SetTitle("Grados Centigrados (C)",'center');
  34. $graph->xaxis->SetTitle("Tiempo",'center');
  35. $graph->xaxis->SetTickSide(SIDE_DOWN);
  36. $graph->xaxis->SetTickLabels($xdata);
  37. $graph->xgrid->Show();
  38. $p1 = new LinePlot($ydata);
  39. $p1->SetColor('teal');
  40. $graph->Add($p1);
  41. $graph->Stroke();

Etiquetas: jpgraph, registro, select, serie, sql, tabla, tiempo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:18.