Gnuplot Tut
Gnuplot Tut
Gnuplot Tut
GNUPlot
Como iniciar el GNUPlot: El programa para graficar datos cientficos Gnuplot (standard en cualquier distribucin Linux) se inicia desde cualquier ventana terminal escribiendo en el prompt gnuplot.
Al iniciarse el programa devuelve un prompt que indica que espera algn comando. Si se desea salir de Gnuplot se debe ingresar exit. Antes del prompt aparece una indicacin de que tipo de terminal se esta usando, en nuestro caso una terminal wxt. Los diferentes tipos de terminales permiten generar salida a diferentes tipos de archivo. Para ver las terminales disponibles se debe escribir set terminal:
El tipo de terminal inicial, wxt es una terminal que permite general grficos en una ventana separada. La sintaxis es: set term wxt {<n>} {size <width>,<height>} {{no}enhanced} {font <font>} {title "title"} {{no}persist} {{no}raise} {{no}ctrl} {close} Este tipo de terminal permite mltiples ventanas con grficos ya que el comando set terminal wxt <n> dirige la salida a la ventana nmero n. El ttulo de la ventana usualmente es el nmero de ventana, pero tambin se puede cambiar utilizando el keyword title. Las ventanas de grficos permanecern abiertas hasta que se presione q con el cursor sobre la ventana, eligiendo close en el men de la ventana, o ejecutando: set terminal wxt <n> close. Adems, la terminal del tipo wxt permite interactuar con la ventana del grfico utilizando el mouse y soporta un modo de texto extendido (enhanced) que permite introducir caracteres especiales. Un comando para tener siempre en cuenta es help seguido del comando para el cual se quiere obtener informacin. Utilizando este comando es posible obtener una ayuda detallada incluso de keywords que modifican ciertos comandos. Por ejemplo, help plot with permite obtener los estilos permitidos en un grfico y sus keywords modificadores.
Cmo graficar con Gnuplot utilizando los comandos plot y splot: Los comandos plot y splot son los comandos bsicos de Gnuplot. Permiten graficar funciones o datos de diversas maneras. El comando plot se utiliza para graficar funciones o datos bidimensionales y splot para tridimensionales. La sintaxis a utilizar es: plot {<ranges>} {<iteration>} {<function> | {"<datafile>" {datafile-modifiers}}} {axes <axes>} {<title-spec>} {with <style>} {, {definitions{,}} <function> ...} donde se puede especificar para graficar una <function> o el nombre entre comillas de un archivo con datos. En la siguiente tabla se listan algunas de las funciones disponibles:
Funcin Devuelve ---------------------------------------------------------abs(x) acos(x) asin(x) atan(x) cos(x) cosh(x) erf(x) exp(x) inverf(x) invnorm(x) log(x) log10(x) norm(x) rand(x) sgn(x) sin(x) sinh(x) sqrt(x) tan(x) tanh(x) absolute value of x, |x| arc-cosine of x arc-sine of x arc-tangent of x cosine of x, x is in radians. hyperbolic cosine of x, x is in radians error function of x exponential function of x, base e inverse error function of x inverse normal distribution of x log of x, base e log of x, base 10 normal Gaussian distribution function pseudo-random number generator 1 if x > 0, -1 if x < 0, 0 if x=0 sine of x, x is in radians hyperbolic sine of x, x is in radians the square root of x tangent of x, x is in radians hyperbolic tangent of x, x is in radians
Existen mltiples formas de modificar el grfico creado incluyendo un ttulo, nombre a los ejes, etc. Algunos de los comandos posibles son:
Create a title: Put a label on the x-axis: Put a label on the y-axis: Change the x-axis range: Change the y-axis range: Have Gnuplot determine ranges: Move the key: Delete the key: Put a label on the plot: Remove all labels: Plot using log-axes: Plot using log-axes on y-axis: Change the tic-marks: Return to the default tics:
> > > > > > > > > > > > > >
set title Prueba Gnuplot set xlabel "Valor de las X" set ylabel "Resultado de la funcion" set xrange [-15:15] set yrange [-0.6:1.2] set autoscale set key at 12,-0.5 unset key set label "Eitqueta" at -15,0.9 unset label set logscale unset logscale; set logscale y set xtics (-12,-6,0,6,12) unset xtics; set xtics auto
Despus de ingresar estos comandos se debe ejecutar el comando replot o graficar nuevamente con el comando plot:
Si sobre este grfico se quiere graficar otra funcin tambin se debe utilizar el comando replot:
Otra opcin es utilizar nuevamente el comando plot para graficar ambas funciones simultneamente: plot sin(x)/x , cos(x*3). El grfico anterior muestra que el rango en el eje Y no es el adecuado porque la funcin cos(x*3) toma valores menores a -0.6 y, adems, la leyenda donde se indica con que color se grafica cada funcin quedo algo tapada al graficar esta funcin. Para resolver esto lo mejor es modificar el rango con el comando set yrange [xx:xx], pero es posible tambin definir el rango en la lnea del comando plot:
En esta oportunidad se incluyo el rango para ambos ejes en el comando plot. Si se desea ajustar solo uno de los ejes utilizando este mtodo el rango del otro debe indicarse como []. Hasta ahora los graficos se dibujan con lneas pero tambin son posibles otras opciones. Cada funcin a graficar puede incluir un keyword with que indica cmo se debe graficar la funcin y cuya sintaxis es: with <style> { {linestyle | ls <line_style>} | {{linetype | lt <line_type>} {linewidth | lw <line_width>} {linecolor | lc <colorspec>} {pointtype | pt <point_type>} {pointsize | ps <point_size>} {fill | fs <fillstyle>} {nohidden3d} {nocontours} {nosurface} {palette}} } donde <style> puede ser uno de los posibles estilos que se dividen en dos grupos. El primero inclute los estilos lines, points, linespoints, dots, impulses, labels, steps, fsteps, histeps, errorbars, errorlines, financebars, xerrorbar, xerrorlines, xyerrorbars, xyerrorlines, yerrorbars, yerrorlines, y vectors que corresponden a estilos que tienen asociadas lneas, puntos o textos. El segundo grupo incluye a los
estilos boxes, boxerrorbars, boxxyerrorbars, candlesticks, filledcurves, histograms, image, rgbimage, rgbalpha, circles, y pm3d que incluyen la posibilidad de rellenar reas del grfico. Por ejemplo, la funcin sin(x)/x) graficada con diferentes estilos sera:
El keyword with tambin puede incluir informacin sobre el tipo de lnea, color, tamao, patrn de relleno (ver su sintaxis ms arriba). Un resumen de las posibilidades se obtiene ingresando el comando test que muestra los tipos, tamaos, etc. disponibles en una ventana.
Por ejemplo, si queremos graficar la funcin con lneas un poco ms gruesas y de color cyan utilizamos
Si queremos graficar la funcin con puntos un poco ms grandes que lo usual y representados con cuadrados usamos plot [-15:15][-1:1.5] sin(x)/x w p pt 4 ps 2:
Ntese que es posible abreviar los comandos si no hay ambigedad en la escritura y que Gnuplot mantiene las leyendas de ejes, ttulo, etc. hasta que no se borren con el comando unset (por ejemplo,
unset title) o cambien. Gnuplot tiene la posibilidad de hacer grficos mltiples en la misma ventana definiendo el modo multiplot y definiendo el rea a utilizar. Por ejemplo, si queremos hacer un grfico de dos funciones en la misma ventana:
En este ejemplo, que el modo multiplot debe definirse al inicio y cerrarse al final (unset multiplot). A continuacin se define el rea a ocupar con el grafico mediante set size xx,yy que fija la extensin en ambas coordenadas (en el ejemplo, el grfico tendra una altura igual a la mitad del largo). Luego se fija donde esta el origen del primer grfico con set origin xx,yy y se grafica sin(x). Finalmente se repite para la funcin cos(x) cambiando el origen para que no se superpongan los grficos. Para graficar superficies se utiliza el comando splot que tiene una sintaxis similar a la de plot pero se debe tener en cuenta que existe un eje adicional. Por ejemplo, para graficar sin(x**2+y**2)/ (x**2+y**2) es conveniente primero borrar las leyendas que utilizamos en los grficos anteriores y definir rangos razonables para las coordenadas X e Y utilizando set xrange y set yrange (o incluir los nuevos rangos en el comando splot):
En el grfico se superponen las lneas que definen la superficie por delante y por detrs lo que puede generar alguna confusin. Para evitar esto se puede definir un modo para lneas ocultas mediante set hidden3d que oculta las lneas ocultas e identifica la parte superior e inferior de la superficie con diferentes colores:
El punto desde donde se esta observando la superficie graficada se define con set view rotxx,rotzz donde rotxx y rotzz son los ngulos de rotacin alrededor de los ejes X y Z en grados. Inicialmente, el eje X coincide con el eje horizontal de la ventana, el eje Y con el vertical y el eje Z sale hacia afuera de la pantalla. Cuando uno usa el comando splot inicialmente grafica con un rotxx=60 grados y rotzz= 30 grados (ver esquina inferior izquierda de la ventana). Por ejemplo, si defino set view 90,0 veo la superficie segn una rotacin de 90 grados alrededor del eje X (el eje X es el horizontal de la ventana, el Y se mete dentro de la ventana y el Z es el vertical de la ventana).
Si se necesita conocer en que puntos la superficie alcanza ciertos valores es til definir valores de contorno que indiquen los puntos donde se logra ese valor. Para ello se dispone de set contour que permite marcar curvas de nivel en la superficie, en la base o en ambas, y de set cntrparam que permite definir el nmero de curvas de nivel a dibujar utilizando diferentes procedimientos. Por ejemplo, para volver al punto de vista original y definir curvas de nivel para los valores 0, 0.2, 0.4, y 0.6 en la superficie y en la base hacemos:
Cmo graficar datos desde un archivo: Adems de graficar funciones, Gnuplot permite graficar datos guardados en archivos de texto comunes. Supongamos que tenemos un archivo llamado datos.dat que contiene mediciones de algunos objetos en un formato de varias columnas:
Los datos de este archivo son mediciones polarimtricas de ciertos objetos donde se agrupan por columnas valores correspondientes a diferentes parmetros. Por otra parte, las lneas que se inician con # son ignoradas por Gnuplot por lo que resultan tiles para incluir comentarios o indicaciones sin afectar la lectura del archivo. Si yo quiero graficar los datos de este archivo usando el comando plot lo puedo hacer mediante plot 'datos.dat', pero por defecto Gnuplot utilizar slo los datos que estn en las dos primeras columnas ( a veces las tres primeras) y, en este caso, graficar el nmero de objeto (Ast) contra el ao (Fecha). Si queremos graficar los valores de otras columnas se requiere indicar claramente cul es la que nos interesa. Por ejemplo, en la cuarta columna (ph) estn los ngulos de fase en el cual se hizo la observacin y en la dcima el valor de polarizacin porcentual reducida (Pr). Si queremos graficas ngulo de fase vs. polarizacin reducida debemos utilizar el keyword using en el comando plot:
Por otra parte, en la sptima columna (eP%) se indican los errores de la polarizacin, por lo cual sera interesante agregar esa informacin incluyendo barras de error para cada punto. Para ello debemos incluir el keyword with con el parmetro errorbars:
Para mejorar un poco el grfico vamos a agregar leyendas en ambos ejes, sacaremos el indicador del rincn superior derecho, reemplazaremos los signos + por tringulos, asignaremos un rango de 0 a 30 grados para el ngulo de fase e incluiremos una lnea que marque el valor cero de polarizacin reducida:
El punto que aparece en un ngulo de fase de 17 grados tiene una gran barra de error asi que tal vez convendria marcarlo de algn modo. Para eso se puede definir etiquetas con set label y flechas con set arrow. Por ejemplo:
Tanto en set label como en set arrow el 1 identifica qu etiqueta o flecha es, lo que permite agregar otros elementos similares al grfico indicndolos con nmeros sucesivos, pero adems me permite modificarlas sin necesidad de reescribir toda la instruccin nuevamente. Por ejemplo, si quiero cambiar la etiqueta Malo? por Que es esto??? el comando set label 1 Que es esto?? es suficiente y no se requiere indicar de nuevo la posicin. Tambin es posible para Gnuplot operar con las columnas de un archivo de datos. En las columnas 6 y 7 del archivo datos.dat aparecen los valores de polarizacin instrumental y el error. Si me interesa ver que error porcentual estoy cometiendo para una polarizacin dada debera graficar polarizacion vs. error/polarizacin, lo que implica que tengo que operar con las columnas del archivo. Para eso en los parmetros para el keyword using puedo aplicar cualquier funcin matemtica para operar con columnas mediante el recurso de encerrar la expresin entre parntesis y nombrar las columnas mediante la expresin $n donde n es el nmero de columna:
Cmo guardar los grficos en diferentes formatos: La posibilidad que tiene Gnuplot de definir terminales diferentes permite lograr salidas a grficos con diferentes formatos. Los formatos ms utilizados son el PNG (o JPEG) y el POSTSCRIPT. Para crear el archivo con el grfico se debe fijar el tipo de terminal que se desea con set terminal <tipo de terminal> y luego abrir un archivo de salida con set output 'archivo.ext'. Cada tipo de terminal tiene diferentes keywords que permiten definir el tipo de letra, el tamao, si acepta caracteres especiales, etc. (consultar el help). Por ejemplo, para crear un archivo de nuestro ltimo grfico en formato PNG, hacemos:
Hay que notar que si bien cerramos el archivo de salida con unset output la terminal vlida sigue siendo PNG dado que no la modificamos nuevamente con set terminal. Esto quiere decir que si queremos ver los grficos en una ventana debemos regresar a una terminal que asi lo permita con, por ejemplo, set terminal wxt. La ventaja de una terminal Postscript es que permite varias opciones muy tiles para crear grficos de muy buena calidad utilizando letras y smbolos especiales. Por ejemplo, si al grfico anterior le quiero agregar una etiqueta que contenga smbolos debo utilizar una codificacin especial para que Gnuplot interprete que es lo que deseo hacer. Primero, se debe asegurar que se utiliza la codificacin correcta con set encoding iso_8859_1. Luego defino la etiqueta mediante set label 2 '{/Symbol=18 \362@_{/=9.6 0}^{/=12 \245}}{/Helvetica e^{{/Symbol m}^2/2} d}{/Symbol m = (p/2)^{1/2}}' at 1.2,20. Si veo el grfico en una terminal wxt la etiqueta no se ver muy bien:
Si se quiere ver en una ventana el grfico correcto es necesario utilizar otro tipo de terminal que no sea wxt. Usualmente se utiliza una terminal X11 que se obtiene con set terminal x11 enhanced y que permite ver la etiqueta correctamente. Otros comandos tiles: Si observan algunos de los grficos que hicimos vern que los valores indicados en los ejes no aparecen siempre con la misma cantidad de decimales o el mismo formato. Para corregir esto se puede definir el formato que se quiere utilizar en un eje dado mediante el comando set format <eje> <formato>, donde <eje> es el eje sobre el cual se aplicar (x, y, o z) y <formato> es un formato parecido al utilizado en Fortran que especifica el formato. Por ejemplo, set format y %.2f indica que los valores indicados en el eje Y aparecern como reales con dos decimales. Para consultar los posibles formatos ver el help (help format). Otro comando interesante es el comando load. Cuando uno tiene que hacer una serie de grficos para un trabajo donde todos tienen el mismo formato, las mismas etiquetas, etc. y lo nico que cambia es el conjunto de datos debera repetir una y otra vez la misma serie de comandos cambiando el nombre del archivo de datos y el archivo de salida del grfico. Existe un comando en Gnuplot que permite ejecutar como instrucciones comandos includos en un archivo de texto que se lee con el comando load. Por ejemplo, si tenemos que graficar una y otra vez el mismo grfico de ngulo de fase vs. polarizacin reducida para diferentes conjuntos de datos podemos hacer un archivo, al que llamaremos instrucciones.gpl, que contenga: set size 0.8,0.8 set title Fase vs. Polarizacion set xlabel Fase (grados) set ylabel Pol (%) set format y %.1f set format x %.0f set terminal postscript enhanced set output sale.eps plot [0:30] datos.dat u 4:10:7 w e pt 4, 0. unset output set terminal wxt unset size unset title unset xlabel unset ylabel unset format y unset format x Luego de crear el archivo instrucciones.gpl se lo lee con load instrucciones.gpl y se obtendr el grfico en el archivo de salida sale.eps. Cuando se tenga un nuevo conjunto de datos se reemplaza el nombre en el comando plot y se cambia el nombre del archivo de salida y se puede reutilizar con la garanta de que todos los grficos sern iguales.