-
Notifications
You must be signed in to change notification settings - Fork 1
/
gnuplot.tex
181 lines (146 loc) · 7.24 KB
/
gnuplot.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
%Autor: amd77
%amd77: 4
\chapter{GNUplot}
\label{gnuplot.tex}
Gnuplot es el programa encargado de hacer las gráficas 2D y 3D que se
visualizaban en Octave. Gnuplot es un programa independiente de
Octave, que usado por sí mismo te permite hacer representaciones de
funciones continuas y de tablas de datos. Octave sólo usa un
subconjunto de las funcionalidades de Gnuplot.
La primera característica de Gnuplot es que es muy similar a Octave
en funcionamiento, es decir, que posee una interfaz de comandos muy
poderosa que también puedes utilizar escribiendo scripts. Esta forma
de trabajar tiene sus desventajas y sus ventajas. Las desventajas es
que necesitas una curva de aprendizaje más lenta, donde tienes que
haberte mirado por lo menos la descripción de uno de los comandos
({\tt plot}) para poder empezar a hacer algo. Cuando estás tanteando
datos mejor que uses otro programa que te permita hacer las cosas más
interactivamente. Pero cuando ya tienes claro lo que tienes que hacer,
por ejemplo, sobre una tabla de datos, y tienes 100 tablas de datos a
las que hacer lo mismo, poder hacer un script puede ser de una gran
ayuda.
La otra característica destacable de Gnuplot es la variedad de
formatos de salida de que dispone, que se pueden seleccionar en el
script. Te permite exportar a formatos vectoriales (xfig, {\TeX},
postscript), formatos bitmap (png, pbm), o formatos de impresora
(epson, hp, etc). Con esto puedes tener tu gráfica retocada por xfig
en tu publicación en LaTeX, o bien puesta en tu página web (png) y o
bien impresa directamente en una impresora.
Al ejecutar gnuplot en un shell entramos a su línea de comandos:
\begin{verbatim}
alberto@mencey:~$ gnuplot
G N U P L O T
Linux version 3.7
patchlevel 1
last modified Fri Oct 22 18:00:00 BST 1999
Copyright(C) 1986 - 1993, 1998, 1999
Thomas Williams, Colin Kelley and many others
Type `help` to access the on-line reference manual
The gnuplot FAQ is available from
<http://www.ucc.ie/gnuplot/gnuplot-faq.html>
Send comments and requests for help to <[email protected]>
Send bugs, suggestions and mods to <[email protected]>
Terminal type set to 'x11'
gnuplot>
\end{verbatim}
Como fuente de ayuda teclea {\tt help} desde dentro del programa y
después de una pantalla introductoria te saldrá un prompt sobre el que
podrás escribir, o bien un nombre que elegirás de los topics que se te
presentan, o bien un nombre de comando si quieres conocer su sintaxis.
Como has visto, el formato de salida es x11 (visualizar en las X).
Para ver un listado de los diferentes tipos de salida disponibles usa
{\tt set terminal}.
\section{Representación de expresiones analíticas}
La parte más sencilla y práctica de Gnuplot es la presentación
de funciones continuas, tanto en forma explícita {\tt y=f(x)} o
{\tt z=f(x,y)}, como puede ser en forma paramétrica: curvas 2D
{\tt (x,y)=f(t)}, curvas 3D {\tt (x,y,z)=f(u)}, superficies 3D {\tt
(x,y,z)=f(u,v)}.
Con {\tt help functions} tenemos un listado de las funciones que
admite. Una gran desventaja que tiene es que muestrea las funciones
a intervalos regulares, por tanto, no hace ningún análisis de
discontinuidades (lo que se nota en, por ejemplo, la función {\tt
floor}), aunque sí se puede configurar para que reduzca el intervalo.
Si queremos imponer cual será el rango del eje X o el Y lo ponemos
entre corchetes antes de la función. Algunos ejemplos:
\begin{verbatim}
gnuplot> plot x # identidad
gnuplot> plot abs(x) # valor absoluto
gnuplot> plot x**2 # parábola
gnuplot> plot [-1:1] sqrt(1-x**2) # semicircunferencia
gnuplot> plot [] [-0.1:1.1] exp(-x**2) # gaussiana
gnuplot> plot [-1:4] gamma(x) # función gamma
gnuplot> plot floor(x) # función redondeo hacia abajo
gnuplot> plot x-floor(x) # diente de sierra
gnuplot> splot x**2+y**2 # plot en 3D
gnuplot> splot sqrt(1-x**2+y**2)
gnuplot> set isosamples 20,20 # cambia la resolución
gnuplot> replot
gnuplot> set isosamples 50,50 # cambia la resolución
gnuplot> set contour # activa líneas de nivel
gnuplot> replot
gnuplot> set parametric # modo paramétrico
dummy variable is t for curves, u/v for surfaces
gnuplot> set samples 500 # mejor resolución (+lento)
gnuplot> plot sin(7*t),cos(5*t) # lissajous en 2D
gnuplot> splot sin(5*u),sin(6*u),sin(7*u) # lissajous en 3D
gnuplot> set samples 100 # menor resolución (+rápido)
gnuplot> splot cos(u)*cos(v),cos(u)*sin(v),sin(u) # esfera en 3D
\end{verbatim}
\section{Representación de archivos de datos}
Gnuplot también tiene un modo para trabajar con archivos de
datos con múltiples columnas. Cuando los archivos de datos tienen 1 ó
2 columnas se presentan directamente. Si un archivo tiene más
de 2 columnas se pueden presentar columnas arbitrariamente, hacer
operaciones matemáticas sencillas entre columnas. Veamos esto en un
ejemplo real (bastante prolijo) donde un servidor genera una línea de
log de load, logins y carga de cpu, a cada hora y queremos obtener
gráficas que muestren la evolución en el tiempo
\begin{verbatim}
# Ejemplo para la monitorización de carga de un servidor en el tiempo
set title "Convex November 1-7 1989 Circadian"
set key left box
set xrange[-1:24]
plot 'gnuplot.dat' using 2:4 title "Logged in" with impulses,\
'gnuplot.dat' using 2:4 title "Logged in" with points
pause -1 "Hit return to continue"
set xrange [1:8]
#set xdtic
set title "Convex November 1-7 1989"
set key below
set label "(Weekend)" at 5,25 center
plot 'gnuplot.dat' using 3:4 title "Logged in" with impulses,\
'gnuplot.dat' using 3:5 t "Load average" with points,\
'gnuplot.dat' using 3:6 t "%CPU used" with lines
set nolabel
pause -1 "Hit return to continue"
reset
\end{verbatim}
Como último ejemplo, vamos a probar un script donde se hacen
ajustes por el método de mínimos cuadrados con Gnuplot. En el ejemplo
se realizan ajustes a una recta variando los pesos, pero el método de
ajuste que utiliza Gnuplot permite poner cualquier función de ajuste,
simplemente definiendo las variables y constantes y dando unos valores
iniciales a las constantes.
\begin{verbatim}
# ajustes por mínimos cuadrados en Gnuplot
y(x) = a*x + b # función a la que se ajustará
a = 0.0 # valores iniciales
b = 0.0 # de los parámetros
fit y(x) 'gnuplot-fit.dat' via a, b
set title 'Ajuste sin pesar'
plot 'gnuplot-fit.dat', y(x)
pause -1 "Pulsa enter para continuar"
fit y(x) 'gnuplot-fit.dat' using 1:2:3 via a, b
set title 'Ajuste con mayor peso en bajas temperaturas'
plot 'gnuplot-fit.dat', y(x)
pause -1 "Pulsa enter para continuar"
fit y(x) 'gnuplot-fit.dat' using 1:2:4 via a, b
set title 'Ajuste con mayor peso a altas temperaturas'
plot 'gnuplot-fit.dat', y(x)
pause -1 "Pulsa enter para continuar"
fit y(x) 'gnuplot-fit.dat' using 1:2:5 via a, b
set title 'Ajuste con peso correspondiente a error experimental'
plot 'gnuplot-fit.dat' using 1:2:5 with errorbars, y(x)
pause -1 "Pulsa enter para continuar"
\end{verbatim}