Generación de figuras y graficos cient´ıficos

Transcripción

Generación de figuras y graficos cient´ıficos
Apéndice C
Generación de figuras y
graficos cientı́ficos
Una parte fundamental de las ciencias es la difusión de resultados a través
de presentaciones y posters en conferencias, publicaciones cientı́ficas en revistas,
publicaciones de divulgación, páginas web, etc.
F90 y C no poseen graficadores standard para generación de gráficos dentro
de los programas. Esta es una de las grandes ventajas de Matlab, que tiene
incorporado un graficador (muy poderoso por cierto si se sabe manejar). Existen
además del graficador de Matlab (con su desventaja del costo!) muchas otras
opciones.
GnuPlot (http://www.gnuplot.info/)
Octave (http://www.gnu.org/software/octave/) Es un emulador de Matlab,
con la capacidad de correr casi todos los scripts de Matlab.
PGPlot (http://www.astro.caltech.edu/ tjp/pgplot/) Serie de subrutinas
que se pueden llamar de C o F90 .
PSPlot Librarı́a para gráficas Post-script.
plotxy Programa de graficación creada por Bob Parker y Loren Shore en
Scripps (san Diego, California), fue utilizado en los 80s y 90s por la mayorı́a
de geofı́sicos (era una de las pocas opciones de graficador con calidad y
versatilidad). En ese momento las opciones de graficadores comerciales era
limitada (http://igppweb.ucsd.edu/ parker/Software/index.html).
Gplot, subrutinas en F90 para graficas on-the.-fly. Creado por Germán
Prieto, lastimosamente solo hecho para ser llamado por F90 . Usa GnuPlot.
(http://wwwprof.uniandes.edu.co/ gprieto/software/gplot.html)
No es la intención de nuestra lista ser completa, simplemente se meustran varias
de las opciones que nosotros hemos encontrado útiles en el pasado. Y aunque
136
Capı́tulo C. Generación de figuras y graficos cientı́ficos
Microsoft Office ofrece un graficador en Excel, este no se recomiendo ya que no
es programable.
El lector es libre de escoger el programa para la generaci´’on de sus gráficas,
pero si es fundamental que estas tengan
1. Unidades y descripción en los ejes
2. Muestra de forma clara las curvas, volumenes, etc.
3. Que dicha figura puede ser guardada en un formato standard (PS, EPS,
PDF) y ojalá sea editable (las figuras guardadas en formato JGP, PNG,
etc., no se pueden editar posteriormente.)
Ya que C y F90 no tienen métodos de graficación sencilla, para este texto se
utilizará el graficador de Matlab (o el de Octave que es gratuito). Los pasos a
seguir serı́an:
Escribir programa en C , F90 , o Matlab
Guardar los resultados (ver sección I/O) en un archivo de texto (en N
columnas, con x, y1, y2, etc.)
Leer o cargar (load) los archivos guardados con el graficador
Generar gráfica, con nombre de ejes, lı́mites, etc. Idealmente se generará un
script de matlab para generar la gráfica, donde se incluye la descripción
de ejes, tı́tulo, colores, etc. y se guarda la gráfica en un formato especı́fico
print(’-depsc’,’nombre_archivo’)
y Matlab guarda la figura en formato EPS como nombre archivo.eps. Se
puede guardar como PS, JPG, PNG, PDF, TIFF, etc.
Como ejemplo, abajo se muestra la secuencia de programas para graficar
varias funciones trigonométricas. Cálculos en F90 , gráficas en Octave (script
serı́a idéntico en Matlab). La secuencia serı́a:
1. Se compila el programa de F90
pperez > gfortran grafico1.f90 -o grafico1
2. Se ejecuta el programa (genera el archivo grafico1.dat.
pperez > grafico1
pperez >
3. Se abre una ventana de Octave o Matlab.
octave >
137
4. Se corre el script grafico1.m, el cual carga el archivo grafico1.dat, lo
lee y genera la gráfica (sale en pantalla). También guarda la gráfica en un
archivo grafico1.eps
octave > grafico1
Cos(f0t)
Sin(f1t)
1
Amplitude (m)
0.5
0
-0.5
-1
0
20
40
60
80
100
Time (s)
Figura C.1: Ejemplo de gráfico generado a través de Octave, con programa
principal en F90 .
Programa C.1 Script de Matlab para leer archivo grafico1.dat, con 3 columnas, y graficar las dos series de datos. NOte que el eje X siempre es la columna
1. Genera un gráfico llamado grafico1.eps.
(grafico1.m)
clear
load grafico1.dat;
plot(grafico1(:,1),grafico1(:,2),’r’)
hold on
plot(grafico1(:,1),grafico1(:,3),’b-o’)
hold off
xlim([-1 101])
ylim([-1.2 1.3])
xlabel(’Time (s)’)
ylabel(’Amplitude (m)’)
legend(’Cos(f_0t)’,’Sin(f_1t)’)
print(’-depsc’,’grafico1.eps’)
138
Capı́tulo C. Generación de figuras y graficos cientı́ficos
Programa C.2 Programa grafico1.f90 para generar serie de datos que se
guardan en archivo grafico1.dat.
(grafico1.f90)
program grafico1
implicit none
integer :: i
real(4) :: t, rcos, rsin, f0, f1
real(4), parameter :: pi=3.1415926536
open(11,file=’grafico1.dat’)
f0 = 0.1;
f1 = 0.069;
do i = 1,100
t = real(i-1)
rcos = cos(2.*pi*f0*t)
rsin = sin(2.*pi*f1*t)
write(11,*) t, rcos, rsin
enddo
close(11)
end program grafico1

Documentos relacionados