Tutorial GnuPlot

De Cuba-Wiki
Saltar a: navegación, buscar

GnuPlot es un programa de distribución libre de muy fácil uso, que corre bajo UNIX, IBM OS/2, MS Windows, DOS, Macintosh, VMS, Atari y otras. Permite hacer gráficos en 2D y 3D basándose en funciones o en sets de datos.

Funcionamiento[editar]

GnuPlot se maneja mediante linea de comandos, con un formato de instrucciones determinado, para el cual se puede referirse a la ayuda para mas información. Para la salida, además de por pantalla, abarca muchos formatos diferentes.

La IDE, al menos para windows, provee un menú que facilita la generación de instrucciones. Sin embargo, cada opción no hace más que agregar un parámetro a la línea de comandos.

Plot de datos[editar]

Para generar un gráfico a partir de un set de datos, lo primero es ubicar el directorio en el que se encuentra mediante change directory (cd). El formato del archivo esperado es datos ubicados en columnas, aunque se le puede indicar a GnuPlot diferencias en el formato.

1  1  1
2  4  8
3  9  27
4  16 64

Para generar el gráfico, se usa la instrucción plot, seguida del nombre del archivo. Para indicar qué columnas se desean graficar, se utiliza la cláusula using x:y. Por ejemplo,

plot "data.txt" using 1:2

Genera un gráfico con los puntos (1,1), (2,4), (3,9), (4,16). También es posible efectuar operaciones sobre los puntos a graficar; por ejemplo,

plot "data.txt" using ($1):($2*$3+1)

Graficará los puntos (1,2), (2,17), etc. GnuPlot admite muchas funciones diferentes, incluyendo logarítmicas, trigonométricas y otras.

Para graficas más de una sola función en el gráfico, se incluyen varias líneas de la siguiente manera

plot "data.txt" using 1:2, "data.txt" using 1:3

Para ordenar mínimamente las queries, se puede recurrir al caracter \ para indicar que sigue en la siguiente linea. Es muy importante que no haya ningún otro caracter después de \, ni siquiera un espacio.

plot "data.txt" using 1:2, \
"data.txt" using 1:3;

Apariencia del gráfico[editar]

En todos los casos anteriores, el resultado sería una serie de puntos en el plano, sin uniones entre ellos. El cómo se muestran los puntos se maneja con el comando with, o simplemente w. Hay distintos tipos de gráficos:

'lines', 'points', 'linespoints', 'dots', 'impulses',
'yerrorbars', 'xerrorbars', 'xyerrorbars', 'steps', 'fsteps',
'histeps', 'filledcurves', 'boxes', 'boxerrorbars', 'boxxyerrorbars',
'vectors', 'financebars', 'candlesticks', 'errorlines', 'xerrorlines',
'yerrorlines', 'xyerrorlines', 'pm3d'

Los más usados son los primeros. Por ejemplo, la siguiente query deja los puntos marcados pero además los une con líneas:

plot "data.txt" using 1:2 w linespoints, \
"data.txt" using 1:3 w linespoints;

Al elegir más de una curva para graficar en la misma imagen, a cada una se le asigna un color diferente. Para forzar un determinado color, se agrega al final un número. En el siguiente ejemplo, la primer curva tiene color azul y la segunda cyan.

plot "data.txt" using 1:2 w linespoints 3, \
"data.txt" using 1:3 w linespoints 14;

Para ponerle una leyenda a cada curva, se usa el comando title, o simplemente t.

plot "data.txt" using 1:2 w linespoints t "Cuadrado" 3, \
"data.txt" using 1:3 w linespoints "Cubo" 14;

Set[editar]

Usando el comando set parameter value antes de llamar a un comando de plot, se pueden determinar ciertos parametros.

Set Key[editar]

Set Key permite definir la posicion y apariencia de la box con la leyenda de qué es cada curva, valores que se definieron con el parámetro t.

set key bottom left title 'Funciones' box

Moverá la leyenda hacia la parte inferior izquierda del gráfico (los opuestos son top y right), colocará el título Funciones y dibujará un contorno alrededor. Es posible determinar la posicion mediante coordenadas, así como distintos tipos de contornos.

Set Range[editar]

Con set xrange o set yrange se puede determinar el rango de valores de los ejes x e y del gráfico. Por ejemplo,

set xrange [-1:20]

Usando set xrange restore se vuelve a los valores por defecto.

Gráficos 3D[editar]

Utilizando el comando splot es posible generar gráficos tridimensionales, claro está que necesitan 3 columnas para graficarse.

Salida[editar]

Usando set terminal es posible especificar el formato de salida. El default es windows, que es la salida por pantalla. Otra posibilidad es png, que escribe a formato png que puede ser luego incluido directamente en un LaTeX, con el comando. Es posible determinar ciertos parámetros según la terminal, como fuente o resolución.

Con set output "archivo.png" se determina el archivo de salida. Este sera creado en el directorio actual, y cabe destacar que se crea (vacio) en el momento en que se introduce el comando de set output, y no suelta el handle hasta cambiar el output o usar el comando unset output.

Inclusión en LaTeX[editar]

Si bien esta la posibilidad de generar código LaTeX que represente el gráfico, se pierde el color y generalmente el resultado no es muy bueno. Lo mejor es salir a png e importarlo.

Para incluir un png en LaTeX se puede usar directamente el comando \includegraphics{archivo.png}, o para hacerlo más prolijo, generar un objeto figure de la siguiente manera:

\thispagestyle{empty}
\begin{figure}
	\centering
	\includegraphics[angle=90]{archivo.png}
	\caption{Funciones cuadrática y cúbica.}
\end{figure}

La primer línea le indica a LaTeX que no ponga pie de página ni número de hoja, que muchas veces se superpone con la figura. Centering centra la imagen, y el angle 90 la rota para que quede horizontalmente en la hoja. Caption despliega una descripción al pie.

Como los gráficos en 640x480 tienden a ser más anchos que el ancho de hoja default de LaTeX, se puede agrandar los márgenes usando

\addtolength{\oddsidemargin}{-.3in}

Y luego de pasar la sección de gráficos, volver al original,

\addtolength{\oddsidemargin}{+.3in}

Al usar objetos figure para los gráficos, LaTeX los incluirá donde mejor le parezca, o sea, en cualquier lado posiblemente mucho después de donde queríamos. Para forzar que al empezar una nueva página se peguen todas las figuras pendientes, se usa el comando \clearpage en lugar de \newpage.