martes, 27 de marzo de 2012

Uso básico de GNUPlot


INDICE

1....Introducción
2....¿Que es GNUplot?
3....Graficación
3a...2D
3b...3D
3c...Estilos
4....Funciones
5....Utilizar opciones con set y show
5a....2D
5b....3D
5c....Estilos de Graficación
6....Propiedades del gráfico
6a....Título del gráfico
6b....Cambio de coordenadas
6c....Tamaño de los gráficos
7....Comandos de configuarción y otros útiles
8.....Sobre este texto y Copyleft

1.- Introducción

El siguiente es un texto informativo sobre GNUplot, creado originalmente para formar parte del proyecto 
"Linux y la Escuela" presentado por el grupo de usuarios de Software Libre del Centro Oeste Santefesino
(aka LugCOS - http://www.lugcos.org.ar) en una conferencia virtual organizada por Cignux; esta versión
modificada tiene como finalidad ser de utilidad para el proyecto Gleducar (http://www.lugcos.org.ar/gleducar)
que basa sus esfuerzoa en llevar la forma de trabajo de la comunidad del Software Libre a las escuelas.
Esta sencilla guía de uso se brinda principalmente por la necesidad de reemplazar el programa no-libre "Winfun"
(de ampllio uso) por uno que respete las libertades que fomentamos.

2.-¿Que es GNUplot?

GNUplot es un programa que se utiliza para graficar funciones. GNUplot es interactivo. También es 
"sensible", es decir no es lo mismo:
gnuplot> plot sin(x)  (lo cual nos gafica la función seno)

que
gnuplot> plot SIn(x) (que nos dará el error: undefined function: SIn)

Se deben de respetar mayúsculas y minúsculas. También tiene la facilidad de que podemos escribir cualquier número de comando en
una línea, siempre y cuando cada comando esté separado por comas ( , ). Luego de la ejecución del comando se crea una
imagen sobre la que luego podemos trabajar con un editor de imágenes como gimp (http://www.gimp.org).

Luego de corrido gnuplot, se nos presenta un prompt en el cual podemos ejecutar los comandos necesarios para graficar lo que necesitemos:
[juanjo@galadriel home]$ gnuplot

        G N U P L O T
        Version 3.7 patchlevel 2
        last modified Sat Jan 19 15:23:37 GMT 2002
        System: Linux 2.4.19-16mdk

        Copyright(C) 1986 - 1993, 1998 - 2002
        Thomas Williams, Colin Kelley and many others

        Type `help` to access the on-line reference manual
        The gnuplot FAQ is available from
        http://www.gnuplot.info/gnuplot-faq.html

        Send comments and requests for help to <info-gnuplot@dartmouth.edu>
        Send bugs, suggestions and mods to <bug-gnuplot@dartmouth.edu>


Terminal type set to 'x11'
gnuplot> 


3.-Graficación:

El programa GNUplot permite confeccionar gráficos tanto en 2D como en 3D:
2D: plot función opciones
3D: splot función opciones


3a.- Para graficar en dos dimensiones se usa el comando 'plot' y si se usa una función predefinida (como 'cos'), la variable va
entre paréntesis ( cos(x) ). Se pueden graficar dos o más funciones al mismo tiempo, basta separarlas con una coma y se grafican una sobre otra en colores diferentes.
Los rangos de la gráfica se establecen poniendo, entre corchetes, los valores mínimos y máximos para X e Y. Esto se hace antes de escribir la función y es opcional.

La sintaxis sería: plot [xmin:xmax][ymin:ymax] función alguna_otra_opcion
Ej: plot [-10:10][-12:12] cos(x)
Ej: plot [-80:80][-35:35] x**2+3

3b.- Para graficar en tres dimensiones se usa en lugar de 'plot, 'splot'. Los rangos se pueden especificar para las tres variables. Si se especifica el rango de una sola,
los corchetes para las otras dos se dejan vacios y siempre deben escribirse.

La sintaxis sería: splot [xmin:xmax][ymin:ymax][zmin:zmax] función alguna_otra_opcion
Ej: splot (x**3 - y**2) * cos(x)
Ej: splot [-5:5][-6:6][-7:7] x+y

Si se quiere desplegar nuevamente la última gráfica visualizada, se puede utilizar el comando 'replot'.
img4
3c.-Estilos de Graficación:

Una gráfica puede desplegarse en varios "estilos", estos pueden ser :
  • lines - une cada punto con líneas.
  • points - coloca un pequeño rombo en cada punto.
  • linespoints - coloca un símbolo en cada punto y los une con líneas.
  • impulses - traza una línea vertical desde el eje X a cada punto.
  • dots - coloca un pequeño círculo en cada punto.
  • steps - en gráficas 2D, une puntos consecutivos con dos líneas.
  • Para gráficas 2D también existen los estilos: boxes, errorbars, boxerrorbars. Sintaxis: (s)plot función with estilo_a_usar Ej:
  • splot [-1:1][-3:3][-1:1] sin(x+y) with dots Ej: plot [][] sinh(x**2) with steps
    
    4.-Funciones:
    
    Las funciones a representar, al igual que en las matemáticas de papel y lápiz, o son funciones "preestablecidas" (seno, coseno..) o están formadas por "operadores"
    y "valores"; además de los valores numéricos tradicionales se pueden usar valores predeterminados, como ser el muy útili valor "pi" = 3,14...
    
    Operadores:
       
    +
    suma
    -
    resta
    *
    multiplicación
    /
    división
    **
    Eleva, al cuadrado, cubo, etc, una variable. Ej: x**2 (x al cuadrado) ; x**3 (x al cubo)
    También se puede usar funciones predefinidas:
    sqrt(x)
    raíz cuadrada
    exp(x)
    exponencial
    log(x)
    logaritmo
    sin(x)
    seno
    cos(x)
    coseno
    tan(x)
    tangente
    y otras del estilo....a probar!
    5.- Utilizar opciones con set y show:
    
    Las siguientes opciones pueden ser usados con 'set', 'set no' y 'show'. Con 'set', se declara que una opción entra en función. Con 'set no', se desactiva esa opciones.
    Para saber si una opción está o no, activado/funcionando, se usa 'show'. Con 'show all' se muestran todos las opciones que están funcionando.
    
    Sintaxis: set opción, set noopción o show opción 
                   
    Esto significa que se ha declarado un cierto modo de trabajo, se ha deshabilitado o se pide información sobre este.
    
    Ej: set border  // Especifica que la gráfica es desplegada mostrando un borde.Ej: set noborder   // Especifica que la gráfica no muestra los bordes.Ej: show border  // Muestra los datos actuales en referencia a 'border'
    Aqui está una lista de todos las opciones(*) que se pueden usar de esta manera:
    
  • angles [grados/radianes] - trabajando en coordenadas polares, cambia de grados a radianes y viceversa.
  • arrow nombre from [x,y,z] to [x,y,z] - coloca flechas en una gráfica.
  • autoscale [ejes] - el rango de una gráfica es asignado automáticamente.
  • parametric - declara el modo paramétrico.
  • clabel - cambia el tipo de línea usado en cada contorno.
  • clip - especifica el parámetro del contorno de las gráficas.
  • cntrparam - controla el modo en que los contornos son graficados.
  • contour [base/superficie/ambos] - especifica en donde se trazarán los contornos.
  • data style [estilo] - cambia el estilo de graficado.
  • dummy [dom1],[dom2],... - especifica el dominio de la función.
  • format [ejes][formato] - especifica el formato de los títulos.
  • function style [estilo] - cambia el estilo de graficado.
  • hidden3d - muestra solo la superficie de la gráfica.
  • isosamples [expresión] - muestra las curvas de nivel.
  • key [x],[y],[z] - permite colocar una clave a cada curva de una gráfica.
  • mapping [cartesianas/esféricas/cilíndricas] - mapea coordenadas en 3D.
  • rrange [rmin:rmax] - especifica el rango radial.
  • samples [expresión] - produce gráficas más precisas al aumentar su rango.
  • size [xsize],[ysize] - pone la escala a tamaño de la gráfica desplegada.
  • surface - controla el despliegue de gráficas de superficie.
  • terminal [tipo] - selecciona el tipo de terminal.
  • tics [dirección] - cambia el sentido de las flechas que aparecen en una gráfica.
  • ticslevel [nivel] - ajusta la altura del eje Z en gráficas 3D.
  • time - coloca el dí a y la hora a la gráfica.
  • title "título" - coloca el título de la gráfica centrado en el eje.
  • trange [tmin:tmax] - especifica el rango paramétrico.
  • urange - especifica los rangos de la superficie paramétrica.
  • view - controla las coordenadas de gráficas 3D que son mapeadas en un espacio 2D.
  • xlabel "nombre" - pone tí tulo al eje X.
  • xrange [xmin:xmax] - especifica el rango horizontal.
  • xtics [start,incr, end] - controla los señalamientos hechos en el eje X.
  • yzeroaxis - trazao.
  • (*) No fueron todos probados exustivamente, comentarios y sugerencias al respecto son bienvenidas.
    
    6.-Propiedades del gráfico:
    
    6a.-Título del gráfico:
    El título de una gráfica aparece al extremo derecho superior y se pone con 'title' y el nombre entre comillas. Si no se usa 'title', por default aparece el nombre de la función.
    
    Sintaxis: title "titulo" o t "titulo"
    Ej: plot x**2 title "Parábola"
    Ej: splot [-2:2][-pi:pi][-1:1] exp(sin(x)) t "ejemplo1", sin(x) t "ejemplo2"
    
    6b.- Nombre de los ejes:
    
    Para poner nombre a los ejes se usa 'xlabel' (eje X), 'ylabel' (eje Y) y 'zlabel' (eje Z).
    
    Sintaxis: set xlabel "nombreX", set ylabel "nombreY"
    
    Ej: set xlabel "eje X"
    Ej: set ylabel "eje Y"
    
    6c.-Cambio de sistema de coordenadas:
    En gráficas 2D, puede cambiarse del sistema de coordenadas rectangulares al sistema de coordenadas polares.
    
    Sintaxis: set polar
    Ej: set polar plot [-2*pi:2*pi][-3:3] x*sin(x)
    
    Para regresar a coordenadas rectangulares se usa 'set no polar'.
    Si se quiere saber en que modo se está graficando, se usa 'show polar'.
    
    6d.-Tamaño de las gráficas:
    Para ajustar el tamaño de una gráfica, se usa 'set size'.
    
    Los valores de la escala para el tamaño se ponen con 'xscale' e 'yscale'.
    
    Sintaxis: set size xscale,yscale
    Ej: set size 0.5,0.5.
    
    Para poner el tamaño normal, se usa 'set size'.
    Para saber en que tamaño se está trabajando se usa 'show size'.
    
    7.-Comandos de configuarción y otros útiles: 
    
  • replot: Vuelve a trazar la función anterior.
  • clear: Borra la función trazada.
  • print: Nos da el valor de una variable (X,Y,Z, etc.)
  • set border: Establece un borde en la gráfica.
  • set noborder: Quita el borde.
  • show border: Revisa si el borde esta activo o inactivo.
  • set boxwidth 11: Establece el ancho de la caja a 11.
  • set boxwidth: Regresa el ancho normal.
  • show boxwidth: Revisa que tan ancha esta la caja.
  • set size 1,2: Establece el tamaño del trazo.
  • set autoescale xyz: Activa la escala tanto en X como Y y Z.
  • set noautoescale X: Desactiva la escala en X.
  • show autoescale: Revisa que las escalas esten activas.
  • X=OFF Y=ON Z=ON.
  • set xrange [-5:8]: Establece el rango de X de [-5,8]
  • set yrange [-10:5]: Establece el rango de Y de [-10,5]
  • set yrange [0.5:15.7]: Establece el rango Z de [0.5,15.7]
  • set xlabel "Lev" 3,4: Etiqueta las X en los puntos 3 y 4 como
  • set ylabel "LCC" 0,10: Etiqueta las Y en los puntos [0,10] como
  • set zlabel "Taller" -15,30: Etiqueta las Z en los puntos [-15,30]
  • show x label: Revisa si X tiene etiquetas, si las tiene marca cual es el texto y las coordenadas.
  • set grid: Establece cuadrículas en el trazo.
  • set nogrid: Quita las cuadrículas en el trazo.
  • show grid: Revisa si están activas o inactivas las cuadrículas.
  • set arrow 3 from 4 to 5: Establece una flecha de 3 unidades de [4,5].
  • set noarrow: Quita la flecha.
  • show arrow: Revisa si hay una flecha.
  • set view 20,30, 2:1, 3:1: Establece una vista de la imagen pero con la X a una rotación de 20º, la Y 30º, la escala total 2:1 y la escala de Z 3:1.
  • show view: Revisa como esta establecida la vista.
  • 8.-Sobre este texto y Copyleft: Esta pequeña guía fue escrita en Carlos Pellegrini, Santa Fe, Argentina. Última modificación: Jueves 07 de Noviembre de 2002
    Copyleft (c)  2001-2002  Juan José Conti <jjconti@gnu.org>
    Se garantiza el permiso para copiar, distribuir y/o modificar este documento bajo los términos de la Licencia de Documentación Libre GNU, versión 1.1 (GNU Free Documentation License, Version 1.1 ) o cualquier otra versión posterior publicada por la Free Software Foundation; este documento se presenta sin Secciones Invariables (no Invariant Sections), sin Textos de Tapa (no Front-Cover Texts) y sin Textos de Contratapa (no Back-Cover Texts). 

    Una copia de la licencia está  puede encotrar se en:
    http://www.gnu.org/copyleft/fdl.html 

    1 comentario:

    1. Hola, estoy intentando graficar una función escalar cuyo dominio en R^2, i.e. f(x,y) en serie de potencias utilizando el comando "sum" dentro de la orden "splot" de la siguiente manera y sin éxito:

      v(n,x,y) = (-x**2 - y**2)**n/n!

      sum10(x,y) = sum [n=1:10] v(n,x,y)

      set samples 15,25
      set isosamples 15,25

      set table 'exp_sum10.dat'
      splot sum10(x,y)
      unset table

      splot 'exp_sum10.dat'

      Noto que la iteración "sum" no tiene inconvenientes cuando es usado para graficas funciones de una sola variable, i.e. g(x) con la orden "plot".

      Agradecería mucho cualquier ayuda con ello antes de darme por vencido y
      apoyarme en otros programas como matemática y matlab que para este tipo de problemas parecen ofrecer soluciones mucho más simples.

      ResponderEliminar