Gnuplot

De Jose Castillo Aliaga
Ir a la navegación Ir a la búsqueda
La versión para imprimir ya no se admite y puede contener errores de representación. Actualiza los marcadores del navegador y utiliza en su lugar la función de impresión predeterminada del navegador.

Gnuplot es un programa muy flexible para generar gráficas de funciones y datos.

Este puede dibujar gráficas a partir de funciones o a partir de ficheros con datos.

Gnuplot tiene su propio lenguaje en el que los comandos plot y splot son los que, finalmente, dibujan la gráfica.


plot {[ranges]}
 {[function] | {"[datafile]" {datafile-modifiers}}}
 {axes [axes] } { [title-spec] } {with [style] }
 {, {definitions,} [function] ...}

Para saber más se puede poner help plot en su línea de comandos.

Funciones

Para dibujar funciones simplemente se escriben:

gnuplot>  plot sin(x)/x   
gnuplot>  splot sin(x*y/20)
gnuplot>  plot sin(x) title 'Sine Function', tan(x) title 'Tangent'
Ejemplo de funciones.

Datos

Los datos han de estar en un fichero en el que, cada línea, tiene columnas separadas por espacios o tabuladores. Si el fichero tiene # al principio de algunas líneas, se tratará como si fueran comentarios. Si hay líneas en blanco será un corte en la línea de la gráfica.

Con el comando plot, se indica la ruta del fichero de datos, se especifica la columna que hará de x y la que hará de y. Si se quieren varias líneas porque hay más datos, se separan con comas.

En el siguiente ejemplo, simplemente dibujaremos los datos. Más adelante le daremos un formato más adecuado.

Por ejemplo, el fichero cpu_stats:

#CPU User% Sys% Wait%
01 8.0 4.8 3.6
02 3.7 3.7 0.7
03 5.0 4.8 0.0
04 2.2 4.2 0.5
05 6.8 3.8 7.2
06 5.5 1.5 0.0
07 3.2 7.8 1.0
08 3.2 1.5 0.0
09 2.8 1.0 0.0
10 3.5 8.0 0.2
...

Estos datos se pueden representar con el siguiente comando:

gnuplot> set style data lines                                                                       
gnuplot> plot 'cpu_stats' using 1:2, 'cpu_stats' using 1:3, './cpu_stats' using 1:4
Gráfica de datos.

Este gráfico tiene un problema: El nombre de las líneas no es representativo. Para solucionarlo, se puede poner title <titulo> en cada uno:

plot 'cpu_stats' using 1:2 title 'User%', \
'cpu_stats' using 1:3 title 'Sys%', \
'./cpu_stats' using 1:4 title 'Wait%'

Personalizar

Todo lo que se muestra se puede personalizar: el título, colores, estilos, rangos...

Con plot

En el comando plot, se puede especificar el estilo de la representación de datos, siendo estas las opciones: lines, points, linespoints, impulses, dots, steps, fsteps, histeps, errorbars, xerrorbars, yerrorbars, xyerrorbars, boxes, boxerrorbars, boxxyerrorbars, financebars, candlesticks y vector.

De esta manera, el anterior gráfico se puede mostrar de otra manera:

plot 'cpu_stats' using 1:2 title 'User%' with boxes, \
'cpu_stats' using 1:3 title 'Sys%' with boxes

Con set

  • Poner título: > set title "Consumo de CPU"
  • Etiqueta de las x: > set xlabel "Tiempo"
  • Etiqueta de las y: > set ylabel "Porcentaje"
  • Rango de las x: > set xrange [0.001:0.005]
  • Rango de las y: > set yrange [20:500]
  • Dejar a gnuplot elegir rangos > set autoscale
  • Mover la leyenda: > set key 0.01,100
  • Quitar la leyenda: > unset key
  • Poner etiquetas: > set label "Punto interesante" at 0.003, 260
  • Quitar etiquetas: > unset label
  • Plot using log-axes: > set logscale
  • Plot using log-axes on y-axis: > unset logscale; set logscale y
  • Change the tic-marks: > set xtics (0.002,0.004,0.006,0.008)
  • Return to the default tics: > unset xtics; set xtics auto

Se pueden modificar muchas más cosas como flechas, bordes, recortes, contornos, rejilla, superficie, tiempo...

Scripts de Gnuplot

Cuando se complica el dibujo de un gráfico, a veces se hace necesario crear un script que lo automatice.

Ejemplo de script.
# Script para dibujar bien lo que contiene "cpu_stats"
set autoscale                        # Pone la escala en modo automático
unset log
unset label                          # Quita etiquetas anteriores
set xtic auto                        # set xtics automatically
set ytic auto                        # set ytics automatically
set title "Utilización de CPU"
set xlabel "Tiempo"
set ylabel "Porcentaje"
set key 15,55
set label "Arranca Máquina virtual" at 25,50
set arrow from 25,50 to 50,60
plot "cpu_stats" using 1:2 title 'User%' with lines , \
"cpu_stats" using 1:3 title 'Sys%' with lines, \
"cpu_stats" using 1:4 title 'Wait%' with lines
 

Para cargar el script se puede poner:

load 'cpu_plot.plot'

Misc.

Aceptar tiempo para la x: [1]

Exportar en png

set terminal png size 400,300 enhanced font "Helvetica,20" set output 'output.png'

Enlaces

Manual simple