lunes, 17 de septiembre de 2012

Impriendo data selectivamente con Gnuplot

Gnuplot es una muy buena herramienta (de línea de comandos) de graficado 2D/3D que funciona en los Sistemas Operativos más comunes. Me es particularmente útil para hacer gráficas de datos tabulados.

Eventualmente recibimos alguna data tabulada para graficar, pero de la que no nos interesa más que una parte. Por ejemplo, nos dan un archivo en el que cada fila representa ciertos indicadores económicos desde el año 1960 hasta 2012, y sólo queremos graficar los indicadores desde 1980 hasta 2000. Otro ejemplo podría ser que tengamos que graficar muchos archivos que tienen una o más líneas de cabecera y lógicamente debemos omitirlas. Otro caso, podría ser que, volviendo al primer ejemplo, quisieramos graficar los datos de cada 5 años y no todos (1965, 1970, 1975, etc).

Para estos casos y muchos más, tenemos la opción every, cuya sintaxis es la siguiente:

every I:J:K:L:M:N

En donde:

  • I: incremento de línea
  • J: incremento de bloque de datos
  • K: primera línea (empezando en 0)
  • L: primer bloque de datos (empezando en 1). Se consideran bloques de datos, los separados por líneas en blanco en el archivo
  • M: última línea
  • N: último bloque de datos

Por ejemplo, si tenemos un archivo con la siguiente estructura:

#year #var1 #var2 #var3
1960 120 80 90
1961 125 85 91
1962 124 79 91
1963 121 81 88
...

y queremos graficar year Vs. var3,  omitiendo la primera línea (cabecera) y sólo tomando en cuenta los primero 100 valores:

plot "archivo.in" every ::1::100 using 1:4 with lp


Observe que sólo se especifica hasta el índice que estemos utilizando (no se colocan ":"s de relleno al final). Por ejemplo, si quisieramos imprimir todos los datos, sólo omitiendo los primeros 3, sería:

plot "archivo.in" every ::3 using 1:4 with lp

Combinando los índices, tenemos muchas posibilidades.

No hay comentarios: