Publi

Pintar una gráfica con gnuplot de datos extraidos de SQLite

Gráfica de datos extraídos de SQLite

Como parte de uno de mis últimos proyectos, recopilo datos periódicamente y los almaceno en una tabla SQLite. Pero, al final, los datos no valen para nada si no somos capaces de tener una visión global de lo que ha pasado a lo largo del periodo de tiempo. Y para eso, ¿qué mejor que pintar los datos en una gráfica?

Ya que los datos los almaceno en SQLite, utilizaré el cliente sqlite3 y para pintar las gráficas, gnuplot.

Lo primero es sacar la consulta SQL para extraer los datos de los ejes X e Y. En este caso, el eje X será el tiempo y el eje Y será el valor obtenido en el test:

1
SELECT VALUE, dtm FROM STATUS WHERE monitor=1;

La consulta la podemos complicar todo lo que queramos, introducir más condiciones, rangos de tiempo, etc. SQLite se lleva bien con estos tipos de datos. Cabe decir que el campo value es de tipo REAL y dtm es de tipo DATETIME (por lo tanto, las fechas y horas vendrán especificadas como %Y-%m-%d %H:%M:%S, algo que le tendremos que decir más tarde a gnuplot.

Construyendo el script para gnuplot

Una vez tenemos los datos, sólo queda construir el script:

1
2
3
4
5
6
7
8
#!/usr/bin/gnuplot

set xdata time
set datafile separator ','
set timefmt '%Y-%m-%d %H:%M:%S'
set style data lines
plot '< sqlite3 -csv testing.sqlite "SELECT value, dtm FROM status WHERE monitor=1;"' using 2:1 title 'sysload';
pause -1 "Close the window"

La consulta SQL, para facilitar las cosas, la exportamos como csv, separada por comas y delimitada con comillas, así será más fácil leerla y evitaremos problemas con los delimitadores. A gnuplot le diremos que el separador de los datos (datafile separator) es la coma.

A gnuplot, tendremos que decirle que el eje x (xdata) corresponde al tiempo. El tiempo es algo más difícil de interpretar que un simple número (además, le tenemos que decir el formato de fecha y hora (como a strftime()), en este caso, sería una fecha tipo «2015-03-20 17:50:30» (año-mes-día hora:minutos:segundos).

Por último plot, se encarga de pintar la gráfica obteniendo los datos de sqlite3 como dijimos antes, tomando como eje X el segundo dato (dtm) y eje Y el primero (value). Si tenemos instalados los módulos x11 o qt de gnuplot lo veremos directamente en pantalla (y por eso la pausa antes de cerrar). De lo contrario, tendremos que sacar la salida como imagen, para ello tendremos que poner antes de plot lo siguiente:

1
2
set terminal 'png' size 1024,768
set output 'plot.png'

y podemos quitar el pause, ya que se producirá directamente en el fichero plot.pnt

También podría interesarte....

There are 9 comments left Ir a comentario

  1. Pingback: Pintar una gráfica con gnuplot de datos extraidos de SQLite | PlanetaLibre /

  2. Pingback: 7 Tareas comunes que echamos de menos en SQLite si venimos de otra base de datos SQL. – Poesía Binaria /

  3. jsimitseo /
    Usando Google Chrome Google Chrome 120.0.0.0 en Windows Windows NT

    I’ve never seen such a diverse range of web slots in one place. It’s like a slots paradise. สล็อตเว็บใหญ่ สุด

  4. jsimitseo /
    Usando Google Chrome Google Chrome 120.0.0.0 en Windows Windows NT

    It’s surprising how common this issue is. Manufacturers should prioritize durability in their designs. เว็บตรง แตกง่าย

  5. jsimitseo /
    Usando Google Chrome Google Chrome 120.0.0.0 en Windows Windows NT

    This is extremely fascinating substance! I have altogether delighted in perusing your focuses and have arrived at the conclusion that you are ideal about a significant number of them. You are incredible. เว็บรวมสล็อตทุกค่าย

  6. jsimitseo /
    Usando Google Chrome Google Chrome 120.0.0.0 en Windows Windows NT

    Here you will realize what is vital, it gives you a connection to an intriguing site page: สล็อตโรม่า

  7. jsimitseo /
    Usando Google Chrome Google Chrome 120.0.0.0 en Windows Windows NT

    I expounded on a comparable issue, I give you the connection to my site. Pokdeng

  8. Fool Me Once Puffer Jacket /
    Usando Google Chrome Google Chrome 120.0.0.0 en Windows Windows NT

    You have a good point here! I totally agree with what you have said!! Thanks for sharing your views…hope more people will read this article!!!

  9. jsimitseo /
    Usando Google Chrome Google Chrome 121.0.0.0 en Windows Windows NT

    I just need to disclose to you that I am new to weblog and unquestionably enjoyed this blog website. Likely I’m going to bookmark your blog . You completely have magnificent stories. Cheers for imparting to us your blog. concierge doctor naples

Leave a Reply