Breve introducción a GNUPlot

Anuncio
gnuplot
Para ejecutar el ambiente de gnuplot, teclear desde la terminal
gnuplot
El comando más simple y usado en gnuplot es «plot»
Cualquier comando, subcomando u opción puede ser abreviada a la forma más
corta que no sea ambigua.
plot "precios" using 1:2 with lines, "precios" using 1:3 with linespoints
plot "precios" u 1:2 w l, "precios" u 1:3 w lp
plot "precios" u 1:2 w l, "" u 1:3 w lp
plot sin(x) # se gráfica la función seno
El comando para guardar y cargar comandos son respectivamente los que aparecen
en los siguientes ejemplos:
se pueden agregar más funciones para graficar junto a la función seno, estas
se van separando con comas
plot sin(x), x, x-(x**3)/6
save "graph.gp"
load "graph.gp"
El rango es dado empleando corchetes inmediatamente después del comando plot
El primer par de corchetes define el rango de valores para x; el segundo
restringe el rango de los valores de y mostrados.
Los archivos de comandos son archivos de texto planos, conteniendo generalmente
un comando por línea. Varios comandos pueden ser combinados en una sola
línea separándolos con punto y coma (;). El símbolo de número es interpretado
como el inicio de un comentario.
plot [][-2:2] sin(x), x, x-(x**3)/6
Exportando gráficas
Para graficar datos desde un archivos encerrarlo entre comillas dobles.
Para cualquier gráfica que se quiera generar, se necesita indicar dos cosas:
el formato de la gráfica (GIF, JPG, PNG, etc) y el dispositivo de salida,
ya sea un archivo o la pantalla. En gnuplot, se hace mediante el comando
«set»:
plot "precios"
Si se quieren seleccionar las columnas que serán usadas como valores de x e y
se deberá usar la directiva «using» con el comando plot.
plot "precios" using 1:2
set terminal png
# escoger el formato de la gráfica
set output "migrafica.png" # escoger el dispositivo de salida
Si se quiere graficar el precio de los bienes XYZ en la misma gráfica hacer
plot "precios" using 1:2, "precios" using 1:3
Para indicarle a gnuplot que estilo usar para los datos, hacerlo con la
directiva «with».
plot "precios" using 1:2 with lines, "precios" using 1:3 with linespoints
Gnuplot automáticamente proporciona un título, el cual muestra un ejemplo
de la línea o el tipo de símbolo usado para cada conjunto de datos junto
con una descripción de texto, pero la descripción por defecto no es muy clara
en estos casos. Se puede indicar el texto que se quiera para un conjunto de
datos como parte de la gráfica con la directiva «title»:
El flujo completo para generar un archivo PNG con gnuplot sería:
plot exp(-x**2)
set terminal png
set output "graph.png"
replot
set terminal x11
set output
#
#
#
#
#
#
#
#
algún comando para graficar
seleccionar el formato del archivo
indicar el nombre del archivo
repetir el último comando de graficación
con la salida yendo al archivo indicado.
restaurar la configuración a la terminal
mandar la salida a la pantalla nuevamente
empleando un archivo vacío
Conjuntos múltiples de datos por archivo: «index»
Una línea en blanco indica una discontinuidad en los datos. Los datos encima
y debajo de la línea en blanco serán tratados como pertenecientes al mismo
conjunto.
plot "precios" using 1:2 with lines title "PQR", \
"precios" using 1:3 title "XYZ" with linespoints
¿Cómo se correlaciona el precio de PQR con XYZ?
Dos líneas en son usadas para distinguir conjuntos de datos en el archivo.
Cada conjunto puede ser direccionado por el comando plot como si este
estuviera separado en un archivo, usando la directiva «index» con plot.
plot "precios" using 2:3 with points
La directiva index se pone enseguida del nombre del archivo en la sintaxis
de plot y se le pone al menos un argumento numérico indicando cual conjunto
del archivo se selecciona. El primer conjunto es identificado con el cero.
1
gnuplot
Para graficar solamente la función de correlación para t=1000 (es el segundo
conjunto de datos).
«csplines» Aplica una transformación única, entonces calcula splines cúbicas
naturales al resultado y las grafica. La curva resultante pasa exactamente
a través de todos los puntos de datos. Como opuesto a la curva de Bézier, la
cual esta definida para el conjunto entero de datos, splines están definidas
localmente (entre dos puntos de datos consecutivos) y unidos suavemente en los
puntos. Esta es aplicable para datos que ya están muy suaves.
plot "data" index 1 using 1:2 w linespoints
La directiva index puede emplear hasta tres argumentos separados por dos
puntos (:)
index {ent:inicio}[:{ent:final}][:{ent:incr}]
«acsplines» Aplica la transformación única al conjunto de datos, entonces
forma una aproximación de splines cúbicas pesadas. El peso es tomado de un
tercer argumento obligatorio.
Registros dispersos en líneas múltiples: «every»
En data2 cada registro para un determinado tiempo se encuentra en dos líneas
la primera línea da la temperatura y el segundo la presión. Si se quiere
grafica sólo la temperatura contra el tiempo, se emplea la directiva «every»
para escoger los registros del subconjunto de líneas:
plot "precios" using 1:2 with linespoints,\
"" using 1:2 title "bezier" smooth bezier,\
"" using 1:2 title "csplines" smooth csplines
Matemáticas en gnuplot
Expresiones matemáticas
plot "data2" every 2 using 1:2 with lines
Empleando la directiva every, se puede controlar como se avanza a través de
líneas.
every {ent:incr}[::{ent:inicio}[::{ent:final}]]
El primer argumento es el incremento, seguido (opcionalmente) por la primera
y la última línea. Los números de línea se cuentan a partir de cero.
Gnuplot proporciona la directiva «smooth» al comando plot como una herramienta
simple para graficar archivos de datos con ruido o desordenados. La directiva
smooth toma un parámetro adicional, el cual deberá ser uno de los siguientes:
unique, frequency, bezier, sbezier, csplines, acsplines
La directiva «unique» ordena los valores dados por la sentencia using para el
eje «x». Si algún valor de x se repite, este será reemplazado con un solo dato
teniendo el promedio de todos los valores «y» correspondientes.
plot "desordenado" u 1:2 smooth unique with linespoints
El segundo uso para unique es para manejar datos desordenados en archivos.
plot [1989:1994][25:34] "descuidado" using 1:2 smooth uniq with linesp,\
"" using 1:2 with points
Suavizando datos con ruido
«bezier» Calcula y grafica una aproximación de Bézier de orden n, donde n es
el número de puntos de datos. La curva está garantizada para que pase a través
del primer dato y el último, pero en general no pasará a través de alguno de
los puntos internos. La curva resultante usualmente aparece particularmente
suave.
«sbezier» Primero aplica la transformación única a los datos, y entonces
calcula y grafica una aproximación de Bézier a los resultados.
Para consultar los operadores disponibles revisar la ayuda
help operators unary
help operators binary
help operators ternary
Para conocer la funciones disponibles revisar la ayuda
help functions
El usuario puede definir variables y funciones
e = 2.71828182845905
# La base de los logaritmos naturales
sqrt2 = sqrt(2)
# la raíz cuadrada de dos
euler = 0.57721566490153 # La constante de Euler-Mascheroni
Ejemplos de funciones definidas por el usuario functions
f(x) = -x * log(x)
gauss( x, m, s ) = exp( -0.5*( (x-m)/s )**2 )/sqrt(2*pi*s**2)
# Usando el operador factorial para generar los coeficientes binomiales
binom( n, k ) = n!/(k!*(n-k)!)
min( a, b ) = ( a < b ) ? a : b # Usando el operador ternario «?»
step( x ) = ( x < 0 ) ? 0 : 1
# Un pedazo de función
plot sin(x), f(x)
Por defecto, gnuplot supone que la variable independiente, la cual es
automáticamente reemplazada por un rango de valores de x cuando se
grafica la función está etiquetada por x, pero puede ser cambiada usando
el comando «set dummy». Por ejemplo,
set dummy t
hará que t sea la variable independiente.
Todas las otras variables que estén en la definición de una función,
deberán tener valores asignados antes de que se pueda graficar la
función.
g(x) = cos(a*x)/a
plot a=1, g(x), a=2, g(x)
2
gnuplot
Todas las funciones y variables tienen alcance global.
Los números complejos son pares de números, las conocidas parte real e
imaginaria. En gnuplot, un número complejo es indicado mediante llaves
({}). El número complejo z = 1 + i es representado por la expresión
Otra forma de seleccionar una columna es usando la función column(x)
plot "data" using 1:($2 + 1.5*column(-2)) with lines
Graficando funciones y datos
z = { 1, 1 }
Muchas de las funciones matemáticas internas, tales como sin(x), exp(x),
y otras, pueden aceptar argumentos complejos y regresar números complejos
como resultados. Las funciones especiales real(x) e imag(x) toman la
parte real e imaginaria del número complejo x, respectivamente. Una
limitante importante de los números complejos en gnuplot es que ambas
partes deberán ser constantes numéricas, no variables, ni expresiones. El
siguiente comando graficará la parte real e imaginaria de la función
exponencial, evaluada para un argumento imaginario.
plot real( exp(x*{0,1}) ), imag( exp(x*{0,1}) )
Transformaciones de Datos
Transformaciones simples de datos
Una función arbitraria puede ser aplicada a cada punto de datos como
parte de la directiva using en el comando plot. Si un argumento a usar
está encerrado entre paréntesis, este no será tratado como un número de
columna, pero si como una expresión a ser evaluada. Dentro de los
paréntesis, se puede acceder los valores de las columnas para el registro
actual precediendo el número de la columna con el símbolo de moneda ($).
Para grafica la raíz cuadrado de los valores encontrados en la segunda
columna contra los valores en la primera columna,
plot "precios" using 1:( sqrt($2) ) with lines
Para graficar el promedio de la segunda columna y la tercera
plot "precios" using 1:( ($2+$3)/2 ) with lines
Pseudocolumnas y la columna función
Gnuplot define dos pseudocolumnas que pueden ser usadas junto con las
transformaciones de datos. La columna 0 contiene el número de línea
en el conjunto de datos actual; la columna -2 contiene el índice del
conjunto actual de datos dentro del archivo de datos. Cuando una doble
línea en blanco es encontrada en el archivo, el número de línea se
reinicia a cero y el índice del conjunto es incrementado.
plot "precios" using 0:1 # Grafica la primera columna contra el número de línea
plot "precios" using 1:-2 # Grafica el índice del conjunto de datos contra la
# primera columna
Con «set samples» se controla el cantidad de puntos con los que una
función será evaluada para generar una gráfica. El valor por defecto
son 100 puntos.
La opción «set clip» controla como gnuplot pone los puntos que están muy
cercanos o lejanos del rango de graficación:
set clip points
set clip [ one | two ]
Trucos y advertencias
* La división entera se trunca 1/4=>0 1/4.0=1.0/4=>0.25
* Para suprimir puntos de datos o generar un pedazo de una función
emplear los valores no definidos.
f(x) = abs(x) < 1 ? 1 : 1/0
plot [-2:2][0:2] f(x)
plot "precios" using 1:( $2 < 100 ? $2 : 1/0 ) with linespoints,\
"" using 1:( $3 < 100 ? $3 : 1/0 ) w l
Gráficas logarítmicas
set logscale
#
set logscale x
#
set logscale y
#
unset logscale
#
unset logscale x #
unset logscale y #
Encender el graficado logarítmico en ambos ejes
Encender el graficado logarítmico para el eje x solamente
Encender el graficado logarítmico para el eje y solamente
Apagar el graficado logarítmico en ambos ejes
Apagar el graficado logarítmico para el eje x solamente
Apagar el graficado logarítmico para el eje y solamente
A continuación se muestran el nombre y el contenido de los archivos de datos
empleados en este material.
precios
# Precio promedio de PQR y XYZ (en pesos por parte) por año calendario
1975
49
162
1976
52
144
1977
67
140
1978
53
122
1979
67
125
1980
46
117
1981
60
116
1982
50
113
1983
66
96
1984
70
101
1985
91
93
1986
133
92
1987
127
95
1988
136
79
3
gnuplot
1989
1990
1991
1992
1993
1994
1995
154
127
147
146
133
144
158
78
85
71
54
51
49
43
data
# Simulación de transición Líquido/Sólido - densidad=0.0017
# x: primera col; corr(x): segunda col
# t=0
0
0.99
1
0.03
2
0.01
3
0.02
4
0.01
# Temperatura de tres ciudades
# Códigos de ciudades (3a columna): Morelia (=1), Zamora (=2), Uruapan (=3)
# Formato: Año Temperatura Ciudad
# ... Morelia y Zamora solamente, anualmente
1990 32 1
1990 29 2
1991 33 1
1991 27 2
1992 31 1
1992 29 2
1993 32 1
1993 26 2
# ... ahora Uruapan, bianual
1991 27 3
1993 29 3
desordenado
# t=1000
0
0.98
1
0.10
2
0.05
3
0.01
4
0.02
1970
1974
1979
1971
1973
1978
1980
# t=2000
0
0.99
1
0.32
2
0.14
3
0.08
4
0.03
1
4
4
3 # ¡no ordenado!
6
5
2
Nota: el siguiente archivo deberá ser guardado con alguna codificación del tipo
ISO-8859 para que se muestre correctamente las vocales acentuadas y la letra ñ
genera.sh
data2
# tiempo - valor
0
100.03
#
0
2.10
#
1
100.26
#
1
2.02
#
2
101.34
#
2
1.95
#
3
102.41
#
3
1.87
#
descuidado
temperatura
presión
t
p
t
p
t
p
echo
echo
echo
echo
echo
echo
echo
echo
echo
echo
set key on center top box > tmp.txt
set terminal postscript enhanced color solid >> tmp.txt
set encoding iso_8859_1 >> tmp.txt
set xlabel \"Año\" >> tmp.txt
set ylabel \"Precio Promedio Anual\" >> tmp.txt
set title \"Comportamiento del Producto PQR vs XYZ\">>tmp.txt
set xtics 2 >> tmp.txt
set ytics nomirror \# Espejo del sistema primario apagado >> tmp.txt
set y2tics 30,20,190 \# Encender el sistema secundario >> tmp.txt
plot \\ >> tmp.txt
echo
echo
echo
echo
[][20:200]
\"\" using
\"\" using
\"\" using
\"precios\" using 1:2 title \"Producto PQR\" w p,\\>>tmp.txt
1:2 smooth bezier title \"Aproximación PQR\" w l,\\>>tmp.txt
1:3 title \"Producto XYZ\" w p, \\ >> tmp.txt
1:3 smooth csplines title \"Aproximación XYZ\" w l>>tmp.txt
cat tmp.txt | gnuplot > comportamiento.eps
4
Descargar