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