GNUplot Básico

Qué es gnuplot

GNUPlot es una herramienta GNU que nos permitirá dibujar fácilmente gráficas con datos numéricos obtenidos en programas externos.

Si ejecutamos gnuplot desde la línea de comandos de Linux, entraremos en el prompt de gnuplot, listo para recibir nuestras órdenes. Si ejecutamos quit o exit, saldremos del programa. Con load fichero.plt dentro de gnuplot o con gnuplot fichero.plt desde fuera, podemos cargar un fichero de órdenes para gnuplot como si las estuviéramos tecleando (el fichero contendrá líneas con el mismo formato que las que se teclean dentro del command line de gnuplot).

Dentro de gnuplot tenemos ejecutar todo tipo de comandos para dibujar gráficas, como por ejemplo:

    gnuplot> plot sin(x)
    gnuplot> plot [0:5] sin(x)
    gnuplot> a=0.5
    gnuplot> print a
    gnuplot> plot a*sin(x)*cos(x) 

Este pequeño tutorial está pensado para mostrar de qué manera se pueden dibujar gráficos ya tabulados en ficheros de texto, obtenidos mediante algún tipo de procesamiento externo, de modo que no veremos todas las posibilidades del prompt de gnuplot.

Pintando datos tabulados

Supongamos que mediante una aplicación obtenemos unos resultados numéricos tabulados en un fichero de texto, del estilo:

    0.10 1.12 23.45 11.11
    0.20 2.12 12.34 22.22
    0.30 2.34 98.23 10.40
    ...
    1.10 8.32 22.45 12.00 

Es decir, un fichero de texto llamado "datos.txt" con (en este caso) 4 columnas numéricas.

Podemos obtener una gráfica en pantalla mediante gnuplot utilizando el siguiente comando:

    gnuplot> plot "datos.txt" using 1:2 with lines 

Es decir: dibújame una gráfica usando las columnas 1 y 2 del fichero datos.txt, rellenando los espacios entre los puntos de la gráfica con líneas rectas.

El parámetro with lines a la hora de dibujar la gráfica indica el tipo de rellenado entre puntos a utilizar (continuo, discontinuo, etc). El formato genérico de uso es with lines o with lines <NUMERO>. Este número varía según el terminal que tengamos seleccionado con el comando set term. La mejor manera de ver los tipos de rellenados disponibles sería ejecutar:

    gnuplot> set term x11
    gnuplot> test 

Podemos dibujar más de una gráfica en la misma ventana:

    gnuplot> plot "datos.txt" using 1:2 with lines, \
    > "datos.txt" using 1:3 with lines, \
    > "datos.txt" using 2:4 with lines 

Si necesitamos añadir títulos, podemos hacerlo:

    gnuplot> plot "datos.txt" using 1:2 title **A** with lines, \
    > "datos.txt" using 1:3 title **B** with lines, \
    > "datos.txt" using 2:4 title **C** with lines 

También podemos superponer funciones teóricas:

    gnuplot> f(x) = 12.3*x + 1.31
    gnuplot> plot "datos.txt" using 1:2 title **A** with lines, \
    > "datos.txt" using 1:3 title **B** with lines, \
    > "datos.txt" using 2:4 title **C** with lines, \
    > f(x) with lines 

Si necesitamos dibujar exáctamente un rango concreto de la gráfica, podemos hacerlo:

    gnuplot> set xrange [0:2]
    gnuplot> set yrange [0:10]
    gnuplot> replot 

La escala no tiene por qué ser lineal, puede ser logarítmica:

    gnuplot> set xrange [0.01:20]
    gnuplot> set yrange [0:2]
    gnuplot> set logscale x
    gnuplot> replot 

También podemos cambiar las graduaciones e incrementos marcados en los ejes:

    gnuplot> set xtics 1
    gnuplot> set mxtics 5
    gnuplot> set ytics 0.5
    gnuplot> set mytics 5
    gnuplot> set grid         (Nota: si queremos poner rejilla)
    gnuplot> replot 

También podemos poner etiquetas en los ejes, y título:

    gnuplot> set xlabel "Clientes"
    gnuplot> set ylabel "Tiempo de respuesta (ms)"
    gnuplot> set title "Mi grafica"
    gnuplot> replot 

Obteniendo una versión impresa de la gráfica

Aparte del hecho de que podemos capturar la gráfica resultante en pantalla con ksnapshot, gimp o similares, podemos obtener una versión postscript PNG (.png) de la gráfica mediante:

    gnuplot> set term png
    gnuplot> set output "salida.png"
    gnuplot> plot "datos.dat" using 1:2

También es posible reimprimir una gráfica después de haberla obtenido por pantalla:

    # cat comandos_gnuplot
    set term x11
    set output "salida.png"
    plot "datos.dat" using 1:2
    set term png
    set output "salida.png"
    replot
    quit 

    # gnuplot -persist < comandos_gnuplot

GNUPlot soporta varios formatos de salida. Por ejemplo, podemos imprimir directamente las gráficas en formato Postscript:

    gnuplot> set terminal postscript
    gnuplot> set output "salida.ps"

Cargar ficheros plt desde línea de comandos

Sea un fichero "datos.plt" con un fichero como el siguiente:

    # Esto es un comentario y gnuplot lo ignora.
    set xlabel "Bla"
    set ylabel "Bla Bla"
    plot "fichero.dat" with (etc. etc. etc.) 

Podemos ejecutarlo de 2 formas diferentes, desde la línea de comandos de Linux o desde dentro de gnuplot:

    bash$ gnuplot -persist datos.plt 

o bien

    gnuplot> load "datos.plt"

La opción -persist (al igual que poner un pause -1 dentro del .plt) sirve para que la gráfica se quede en pantalla hasta que pulsemos una tecla.

Estilos de ploteado

Como ya hemos visto, hay diferentes estilos de ploteado. Veamos algunos ejemplos:

    gnuplot> plot (...) with lines
    gnuplot> plot (...) with lines -1
    gnuplot> plot (...) with dots
    gnuplot> plot (...) with impulses
    gnuplot> plot (...) with steps
    gnuplot> plot (...) with histeps
    gnuplot> plot (...) with boxes
    gnuplot> plot (...) smooth csplines
    gnuplot> plot (...) smooth bezier

Otros

  • Dibujar ejes en el cero:
gnuplot> set xzeroaxis
gnuplot> set yzeroaxis lt -1 

La opción lt permite indicar el line type, pero también hay ls (line style) o lw (line width).

  • Recortar puntos cerca de los bordes: si no queremos que se dibujen puntos cerca de los ejes, podemos hacerlo como en el siguiente ejemplo:
    gnuplot> set clip one
    gnuplot> plot sin(x) with linespoints
    gnuplot> set noclip one
    gnuplot> replot
    gnuplot> set clip two
    gnuplot> replot
    gnuplot> set noclip two
    gnuplot> replot 
  • Que la gráfica sólo tenga la parte positiva en X e Y: si sólo queremos sacar el primer cuadrante de la gráfica, podemos hacerlo con:
    gnuplot> set xtics nomirror
    gnuplot> set ytics nomirror 
  • Recortar la relación de aspecto de la gráfica:
    gnuplot> set size square
    gnuplot> set size ratio 0.5 
  • Añadir una rejilla a los minor tics:
    gnuplot> set grid xtics ytics mxtics mytics 
  • Ejemplo de fichero para generar una gráfica:
#!/usr/bin/gnuplot

set data style lines
set term png
set xdata time
set format x "%H:%M"
set timefmt "%H:%M"
set xtics 60*60
set datafile missing "0"

set title  "Uso de CPU "
set ylabel "% CPU en uso"
set xlabel "Hora del 2009_02_24"
set output "2009_02_24_maquina-uso_cpu.png"
set yrange [0:100]
plot "reports.txt" using 2:3 notitle



<Volver a la sección de GNU/Linux>