You are on page 1of 9

1/10/2014 Grficos

http://iimyo.forja.rediris.es/matlab/cursolatex007.html 1/9

Chapter 4 Grficos
La representacin grfica de funciones y de series de puntos es uno de los fuertes de los lenguajes de
scripting cientfico. Todos ellos tienen rutinas para dibujar, de modo sencillo y rpido, grficas de
funciones.
Matlab est orientado al dibujo de grficas elementales. Para visualizacin en tres dimensiones ser
mejor optar por otra aplicacin ms especializada
1
. Para las necesidades bsicas es ms que suficiente.
Sus funciones se pueden clasificar en dibujo de lneas, grficos estadsticos, grficas de contornos y
superficies. Hay una gran variedad de funciones, aqu slo veremos las ms importantes. Pero antes de
dibujar nada es conveniente que conozcamos infraestructura de grficos de Matlab
2
.
4.1 Figure, hold y subplot.
Cuando llamamos alguna funcin de representacin grfica Matlab debe antes crear una ventana en el
entorno grfico, para ello usa la funcin figure. No es necesario que usemos esta funcin siempre;
cuando no tengamos ninguna ventana activa Matlab la llamar por nosotros. Ser necesario llamarla
cuando queramos utilizar varias ventanas a la vez. Supongamos que acabamos de dibujar una curva en
una ventana nueva con
>> plot([1,2,3])
Matlab abrir una ventana de nombre figure 1
3
donde va a dibujar todo a partir de ahora. Si llamamos
a otra rutina grfica, sea cual sea, la va a dibujar en la ventana activa, figure 1. Si queremos dibujar en
otra ventana tendremos que llamar la funcin figure usando como argumento el nmero de una ventana
que no se encuentre activa, por ejemplo:
>> figure(2)
A partir de ahora la ventana 1 va a estar inactiva y todo lo que dibujemos va a expresarse en la ventana
2. figure tambin sirve para volver a dibujar en una ventana existente pero inactiva, slo tenemos que
darle como argumento el nmero de la ventana; en nuestro caso:
>> figure(1)
Cuando dibujamos en una ventana activa en la que ya haba previamente una grfica Matlab la borra
automticamente. Lo que hace es llamar implcitamente la funcin clf. Para que la nueva grfica se
superponga a la anterior usaremos la funcin hold. Para conseguir superponer grficas en la figura 1,
la figura activa:
>> hold on
Y cuando hayamos terminado:
>> hold off
Podemos tener la necesidad de dibujar varias grficas en una misma ventana, para ello existe la funcin
1/10/2014 Grficos
http://iimyo.forja.rediris.es/matlab/cursolatex007.html 2/9
subplot. Funciona exactamente igual que figure pero opera dentro de la misma ventana. Se llama con
tres argumentos, el primero son el nmero de subgrficas por fila, el segundo el nmero de subgrficas
por columna y el tercero es la subgrfica que activamos en cada momento. Por ejemplo el script:
x=linspace(-pi,pi,100)
subplot(2,2,1)
plot(x,sin(x))
subplot(2,2,2)
plot(x,cos(x))
subplot(2,2,3)
plot(x,sinh(x))
subplot(2,2,4)
plot(x,cosh(x))
Produce la figura 4.1:
Figure 4.1: Ejemplo de uso de subplot
A todos los efectos cada apartado de subplot es como una ventana a parte, incluso en lo referente a
ttulos y nombres de ejes como veremos a continuacin.
Para activar y desactivar la cuadrcula se usa la funcin grid del mismo modo que hold, con grid on
para activarla y grid off para desactivarla. Para ajustar los ejes a los valores deseados tenemos la
funcin axes a la que hay que pasarle un vector de datos. Encontraremos un ejemplo en la seccin 4.3.
4.2 Title, xlabel, ylabel, legend y text.
Otro de los requerimientos de una grfica cualquiera es poder aadir un ttulo y nombres a los ejes y a
las curvas. title, xlabel, y ylabel funcionan de manera idntica; si les pasamos una cadena de texto la
tomarn por el nombre de la grfica, del eje x y del eje y respectivamente. Lo vemos en el ejemplo
siguiente y en la figura 4.2:
x = linspace(0, 500, 10000)
plot(x,exp(-x/100)*sin(x))
1/10/2014 Grficos
http://iimyo.forja.rediris.es/matlab/cursolatex007.html 3/9
title('Una funcion cualquiera')
xlabel('Tiempo')
ylabel('Amplitud')
Figure 4.2: Insercin de nombres en las figuras
En el caso que tengamos varias curvas en la misma grfica podemos dar un nombre a cada una de ellas
mediante la funcin legend. Veremos un ejemplo ms adelante. Tambin podemos introducir en los
grficos caracteres especiales o letras griegas. Para hacerlo hay que tener nociones bsicas de TeX
4
.
Matlab por defecto interpreta todos los caracteres empezados con una barra invertida ``'' como palabras
clave en TeX como en el script siguiente que produce la figura 4.3:
x = linspace(0, 500, 10000)
plot(x,exp(-x/100)*sin(x))
title('{ \it A e} ^{- \alpha \it t}sin \beta{ \it t} \alpha<< \beta')
xlabel('Tiempo ( \mu s)')
ylabel('Amplitud (mV)')
1/10/2014 Grficos
http://iimyo.forja.rediris.es/matlab/cursolatex007.html 4/9
Figure 4.3: Insercin de caracteres griegos
Para introducir caracteres de manera arbitraria tenemos la funcin text. Nos permite introducir texto o
caracteres especiales en cualquier punto de una figura. Como es de esperar es una funcin que requiere
muchos argumentos de modo que tendremos que leer la ayuda cuidadosamente. Es una funcin que nos
permite hacer cosas muy interesantes como la que se muestra en la figura 4.4. Es un ejercicio muy
interesante que intentemos programarlo; el sombreado se consigue con la funcin fill.
Figure 4.4: Ejemplo de uso de text
4.3 Dibujo de curvas en el plano.
Ya hemos visto la funcin ms bsica para la representacin grfica de datos, plot. Veremos ahora sta
1/10/2014 Grficos
http://iimyo.forja.rediris.es/matlab/cursolatex007.html 5/9
y otras funciones tiles para la representacin de curvas en dos dimensiones.
plot
Esta funcin dibuja curvas en dos dimensiones. Soporta mltiples combinaciones de argumentos.
La llamada ms sencilla es:
>> plot (Y)
donde Y es la serie de ordenadas mientras que como coordenada X se toma la serie correspondiente a
contar los puntos empezando desde 1. Si queremos pasarle ms argumentos plot los va a interpretar de
la forma:
>> plot(X,Y,FMT,X,Y,FMT,X...)
Los elementos X e Y son interpretados del modo siguiente: si ambos argumentos son vectores se
representa la serie de puntos definida por los dos; esto implica que deben ser de la misma longitud. Si el
primer argumento es un vector y el segundo es una matriz se representan las curvas correspondientes al
vector junto con cada una de las filas o columnas de la matriz. Se prueban primero las columnas, si es
imposible la representacin luego se prueban las filas; si ambos fallan se obtiene un mensaje de error. Si
el primer argumento es una matriz y el segundo es un vector se acta de la misma manera. Si ambos
argumentos som matrices se toman como datos para curva las columnas; requerir que tengan una
forma idntica.
FMT es el argumento que define el tipo de lnea. Es una cadena de texto y en su ausencia se tomar
como formato bsico la lnea slida. Para saber los tipos y colores de lneas disponibles mediante el
formato consultaremos la ayuda.
x=linspace(-pi,pi,100);
plot(x,sin(x),'m:',x,cos(x),'k ^',x,tan(x),'bx')
axis([-pi,pi,-2,2])
grid on
legend('linea de puntos magentas','triangulos negros','cruces azules')

Dibuja en pantalla la el equivalente a la figura 4.5:
Figure 4.5: Estilos de lnea
1/10/2014 Grficos
http://iimyo.forja.rediris.es/matlab/cursolatex007.html 6/9
semilogx

semilogy
Dibuja una curva bidimensional utilizando una escala logartmica en el eje x e y respectivamente.
loglog
Dibuja una curva bidimensional utilizando una escala logartmica en ambos ejes.
errorbar
Dibuja una curva bidimensional con las barras de error correspondientes. Las combinaciones de
argumentos son parecidas a las de la funcin plot. La llamada ms sencilla es:
>> errorbar (Y,EY)

Si la funcin plot acepta dos argumentos antes de dar el formato de curva, error acepta seis, dos para
los datos y cuatro para cada direccin de error en el punto. Al igual que en el caso anterior utilizaremos
la ayuda para entender su uso.
polar
Dibuja una curva sobre el plano con coordenadas polares.
4.4 Grficas estadsticas.
Las grficas especiales para expresar datos estadsticos son los histogramas y los diagramas tipo
``tarta''. En Matlab se controlan con los comandos siguientes
hist
Dibuja un histograma. Con un nico argumento el resultado es un histograma con diez
contenedores. El intervalo de datos de cada contenedor se calcula a partir del argumento. El
segundo argumento es siempre el vector de puntos donde debe centrar cada uno de los
contenedores. Las fronteras se determinarn como el punto medio entre el centro dado y el
siguiente. El tercer argumento es siempre un escalar que sirve para normalizar el histograma de
tal manera que la suma de todas las barras ser igual al mismo.
pie
Muestra los valores dados en una grfica tipo tarta. Matlab normaliza los datos automticamente
para que la suma de los datos sea el total de la tarta. Para separar alguna de las porciones
podemos utilizar la opcin explode; como siempre, consultaremos la ayuda
4.5 Grficas tridimensionales.
4.5.1 Un error bastante comn.
Que podamos hacer algo no significa que sea necesario hacerlo. Sin embargo cuando uno posee una
herramienta tan potente como Matlab tiene la impresin de que est obligado a utilizar superficies en
tres dimensiones a todo color. Cuando hemos terminado de poner la leyenda y de posicionar los ejes
estamos tan satisfechos que no nos hemos parado a pensar si es conveniente utilizar una superficie
paramtrica. La respuesta suele ser no. El modo ms simple de dar un dato es siempre el mejor. Cuando
no podemos dar un resultado numrico damos una curva. Cuando no podemos dar una curva y
pensamos en dar una superficie es que no lo estamos pensando bien. Las recomendaciones siguientes
parten de la larga experiencia de los que me han enseado Matlab; suelen ser prcticas muy tiles
1/10/2014 Grficos
http://iimyo.forja.rediris.es/matlab/cursolatex007.html 7/9
porque auydan a no meter la pata.
Los colores son bastante tiles pero cualquier exceso es malo. Siempre es mejor dibujar contornos
que colorear un plano porque los mapas de colores no tienen fronteras definidas. El lector tiende
a verlas como una imagen, no como un mtodo para presentar datos.
Las superficies paramtricas son siempre intiles para mostrar datos; esto es casi una verdad
universal. Slo tenemos que mirar un poco de bibliografa (bien escrita). A no ser que estemos
representando justamente una superficie deformada no tiene ningn sentido representar datos de
esa forma. La razn es bien sencilla, las superficies se presentan siempre en perspectiva con lo
que es mucho ms complicado ver el valor en un punto. Siempre ser mejor dar curvas de nivel.
Los mapas de vectores, esos diagramas de flechas usados para representar campos vectoriales,
suelen ser contraproducentes. Si el campo es irregular las flechas dan informacin confusa porque
slo dan el dato en un punto. Si el campo es bastante regular sern mucho ms tiles las curvas de
nivel.
Los perfiles son muy tiles para reducir variables. Supongamos que tenemos datos en funcin de
dos variables y que la variacin respecto a una de ellas es mucho menor. Lo mejor que podemos
hacer es calcular la media sobre la variable que cambia menos y representar el resultado en dos
curvas, una con la media (el perfil) y la otra con la desviacin tpica.
Representar grficamente no es fcil. Dar un resultado de forma errnea o confusa es tan grave
como equivocarse en el mismo.
4.5.2 La funcin que tenemos que utilizar
contour
Dibuja las lneas de nivel de una superficie paramtrica tridimensional definida por sus puntos.
La representacin grfica por curvas de nivel cumple sistemticamente los requisitos expresados
anteriormente para cualquier tipo de representacin tridimensional. Tiene la gran virtud de expresar de
modo muy simple una gran cantidad de informacin. El hecho de que podamos escoger qu lineas de
nivel queremos representar es adems una gran ayuda para explorar una solucin que no llegamos a
entender.
Es muy normal despreciar esta funcin y utilizar las espectaculares superficies paramtricas. Es un
error. La funcin contour es configurable, rpida y muy fcil de utilizar. El ejemplo ms sencillo es
utilizar la funcin peaks que genera una matriz de 4949 representando las alturas de una superficie
paramtrica:
>> contour(peaks)
Esto genera la grfica 4.6.
1/10/2014 Grficos
http://iimyo.forja.rediris.es/matlab/cursolatex007.html 8/9
Figure 4.6: Curvas de nivel del resultado de la funcin peaks.
Tambin podemos introducir tres vectores correspondientes a las coordenadas de los puntos en el
espacio. Esta opcin es muy til en el caso de estar trabajando con datos estadsticos o de representar
resultados obtenidos con mallas no estructuradas. Probablemente la opcin ms interesante sea la de
poder introducir las curvas de nivel que deseemos en cada caso. En el siguiente ejemplo quince curvas
de nivel:
>> contour(peaks,linspace(max(max(peaks)),min(min(peaks)),15))
Figure 4.7: Introduccin de curvas de nivel personalizadas.
4.5.3 Las funciones que no tenemos que utilizar
1/10/2014 Grficos
http://iimyo.forja.rediris.es/matlab/cursolatex007.html 9/9
Todas las funciones que veremos a continuacin tienen su utilidad pero la mayora de ellas se usan sin
sentido o sin necesidad.
quiver
Dibuja un campo de vectores bidimensional. Suele utilizarse con la funcin gradient.
mesh
Dibuja una malla representando la superfcie paramtrica tridimensional dada por los
argumentos
surf
Equivalente a mesh pero dando una apariencia slida a la superfcie
meshc
Funcin que combina mesh con contour, es decir, dibuja la malla de la superfcie tridimensional
mientras que en el plano z=0 dibuja las curvas de nivel.
view
Cambia la vista segn los ngulos respecto al eje y en una grfica tridimensional. Suele se ms
preciso que el ratn ya que nos ayuda a controlar las rotaciones con ngulos conocidos.
1
Matlab no es un visualizador. Los visualizadores son bibliotecas o programas especializados en la
exploracin de datos en 3 dimensiones. Supongamos que tenemos que manejar varios gigabytes en
datos y necesitamos lneas de corriente, isosuperfcies transparentes... Si la complejidad es
moderada nos servir algn programa de visualizacin pero en casos extremos ni esto ser
suficiente. La solucin ser crear un programa o una subrutina con algn lenguaje de alto nivel
como C++, Java o Python utilizando las funciones de la biblioteca de visualizacin. Muchos de
los visualizadores son interfaces grficos para ayudarnos a manipular estas funciones sin tener
que escribir cdigo. Una empresa que durante muchos aos ha comercializado las mejores
herramientas de visualizacin, tanto a nivel de hardware como de software, es SGI (Silicon
Graphics). Esta empresa creci vendiendo estaciones de trabajo y desarroll una de las libreras
ms conocidas para grficos 3D, OpenGL. Las herramientas de visualizacin estn encima de la
capa bsica de OpenGL que es lo que manipula las funciones bsicas del dibujo.
Tres de las bibliotecas ms importantes son OpenInventor de SGi, Data explorer o DX de IBM y
VTK (Visualization ToolKit).
2
Octave no tiene rutinas grficas propias, usa una aplicacin a parte llamada Gnuplot. Si nuestra
instalacin de Octave no va acompaada de Gnuplot no podremos dibujar absolutamente nada.
Gnuplot es un programa bastante limitado y tiene una sintaxis distinta a Matlab, sin embargo
Octave ofrece una capa de compatibilidad bastante decente que ir mejorando en futuras
versiones. Algunas de las funciones comentadas tienen una implementacin distinta en Octave.
3
Octave llama a las ventanas contando a partir del cero, Matlab las cuenta a partir del uno.
4
Podis encontrar una pequea introduccin a TeX en los apndices

You might also like