Professional Documents
Culture Documents
Matplotlib es la biblioteca para crear grficos ms usada en Python. Es un paquete que contiene una gran cantidad
de mdulos para crear grficas en 2D y 3D con calidad de publicacin, es decir, las figuras que genera se pueden usar
en artculos para revistas cientficas de alcance internacional. La pgina web del paquete es http://matplotlib.org/.
Entre todos los mdulos y subpaquetes de matplotlib el ms adecuado para crear grficas es pyplot. Este mdulo
contiene funciones que asemejan a las encontradas en otro sistema de cmputo cientfico llamado MATLAB, de tal
manera que para los usuarios de este sistema Python resulte un ambiete de programacin familiar.
Las libretas de IPython tienen soporte por default para todas las funciones de los paquetes numpy, matplotlib y pyplot.
Esto significa que no es necesario importar las bibliotecas explcitamente:
In [3]: import numpy as np
import matplotlib.pyplot as pyplot
puesto que ya estn precargadas. Tampoco hay que escribir el nombre de los mdulos y el operador punto para
acceder a la funcionalidad. Sin embargo en un programa independiente (un archivo .py) s es necesario, as que vale
la pena remarcarlo.
Un ejemplo sencillo
Matplotlib siempre se usa junto con numpy. Es ms, la primera depende de la segunda. La razn de esto es que los
arreglos multidimensionales de numpy son las estructuras de datos naturales para graficar.
Comencemos con un ejemplo sencillo: la grfica de la funcin matemtica seno f (x) = sin(x) . El dominio de esta
funcin son los nmeros reales, x , y la imagen de la misma son los reales en el intervalo cerrado [1, 1]. Para
graficarla tenemos que escoger un intervalo de su dominio y aplicar a funcin a los puntos de ese intervalo. En Python
lo que regularmente hacemos es tomar un conjunto de puntos igualmente espaciados desde un punto inicial x 0 hasta
un punto final x f , y evaluamos la funcin en esos puntos.
Con numpy ya tenemos una manera de crear un intervalo de puntos igualmente espaciados: la funcin arange, que
acepta tres argumentos posicionales: el primero es el punto inicial, el segundo el punto final, y el tercero el
espaciamiento entre puntos.
In [1]: x0, xf, dx = -30, 30, 0.1
x = arange(x0, xf, dx)
# print x
Estos son los puntos donde vamos a evaluar la funcin. En nuestro ejemplo graficaremos la funcin seno.
Ahora bien, antes de continuar recordemos que la variable x es un objeto de tipo ndarray, un array de numpy. Si
queremos aplicar una funcin a los elementos de un array es necesario que las funciones sepan como trabajar con
esos arrays, es decir, que sean capaces de aplicar la funcin elemento por elemento del array x. Para esto numpy
implementa sus propias versiones de las funciones matemticas ms importantes, entre ellas la funcin seno. As,
aplicamos la funcin sin a los elementos del array x y er resultado lo guardamos en una variable y. Esta variable y
corresponde a la funcin evaluada en los puntos de x.
In [2]: y = sin(x)
Con esto tenemos suficiente para crear una figura muy sencilla:
In [3]: title(u'Grfica del f(x) = sin(x)')
xlabel('x')
ylabel('f(x)')
xlim(-10, 10)
ylim(-2, 2)
plot(x, y)
Out[3]:
[<matplotlib.lines.Line2D at 0x7751908>]
Realmente el cdigo se explica slo. Cada una de las funciones usadas para crear la figura pertenecen al mdulo
pyplot, y su funcionalidad es ms que evidente:
La funcin title establece el ttulo de la grfica en una cadena de texto.
xlabel establece la legenda en el eje x .
ylabel es anloga a xlabel, pero para al eje y .
xlim define el intervalo a graficar en el eje x . El primer argumento de la funcin es el lmite inferior. El
segundo es el lmite superior.
ylim es anlogo a xlim para el eje y .
plot se encarga de graficar los datos de inters. El primer argumento que acepta son el conjunto de las
coordenadas x de los puntos a graficar. El segundo argumento son las coordenadas y de los mismos.
Importante: si se quieren escribit ttulos o etiquetas en los ejes con caracteres acentuados hay que escribir
las cadenas de texto con una u antes de la primera comilla que delimita la cadena (o antes de las comillas
dobles). Ejemplo:
In [4]: # Manera recomendada de escribir ttulos con caracteres acentuados y ees en matplotl
texto = u'Grfica de ...'
# O bien
texto = u"Grfica de ..."
[<matplotlib.lines.Line2D at 0x7d11438>]
[<matplotlib.lines.Line2D at 0xa1d0588>]
En este ejemplo no definimos cosas como el ttulo o las etiquetas x y y , pero el efecto sobre la grfica est all.
Podemos usar una combinacin de las siguientes letras para definir un color y marcador:
Colores
r: rojo, g: verde, b: azul, c: cyan, m: magenta, y: amarillo, k: negro, w: blanco
Marcadores o: crculo, s: cuadrados, v: tringulo hacia abajo, ^: tringulo hacia arriba, -: lnea slida, --: lnea
punteada, D: diamantes
In [9]: # Lnea con diamantes color cyan
pyplot.plot(x, y, 'cD')
Out[9]:
[<matplotlib.lines.Line2D at 0x8ed50b8>]
La segunda forma de especificar el color y el marcador es indicando la forma del marcador con el argumento nombrado
marker y definir el color con un argumento nombrado, color. En este caso el color tambin es una de las letras
indicadas anteriormente.
In [10]: # Lnea con diamantes color cyan, usando el argumento nombrado color
pyplot.plot(x, y, marker='D', color='c')
Out[10]:
[<matplotlib.lines.Line2D at 0x8efe470>]
El resultado es el mismo que en el primer caso. La ventaja de este mtodo es que el color puede ser especificado en
varios formatos: con las letras indicadas anteriormente, con los nombres completos de los colores (en ingls), por
ejemplo, yellow, mediante notacin hexadecimal, por ejemplo el rojo es #FF0000, o una tupla de tres elementos para
indicar un color RGB (red, green, blue), por ejemplo, el rojo es (1, 0, 0):
In [11]: # Lnea con diamantes color rojo, usando color en hexadecimal
pyplot.plot(x, y, marker='D', color='#FF0000')
Out[11]:
[<matplotlib.lines.Line2D at 0x91067b8>]
[<matplotlib.lines.Line2D at 0x948bba8>]
La mayora del tiempo es suficiente especificar el color con una letra, sin embargo en grficos ms sofisticados puede
ser necesario recurrir a colores en otra notacin. En internet hay sitios que nos permiten elegir colores de manera
visual, y stos generan el valor del color seleccionado tanto en hexadecimal o RGB. Por ejemplo, en este enlace se
muestran algunos colores en ambas notaciones. Usemos uno de los colores definidos all: #CC3399.
In [13]: # Lnea con diamantes color cyan, usando color en RGB
pyplot.plot(x, y, marker='D', color='#CC3399')
Out[13]:
[<matplotlib.lines.Line2D at 0x94b5e48>]
El grosor de las lneas que unen los marcadores est definida por el argumento nombrado linewidth, o lw. El valor
de este puede tomar valores reales positivos.
In [14]: # Lnea con diamantes color cyan, usando color en RGB
pyplot.plot(x, y, marker='D', color='#CC3399', linewidth=10)
Out[14]:
[<matplotlib.lines.Line2D at 0x9865240>]
Out[14]:
[<matplotlib.lines.Line2D at 0x9865240>]
Mostrando el cuadriculado
Podemos activar el cuadriculado de la grfica con la funcin grid, pasndole el valor True para mostrarlo, o False
para desactivarlo.
In [40]: SIZE = (6, 6)
[<matplotlib.lines.Line2D at 0xc06e320>]
[<matplotlib.lines.Line2D at 0xac07908>]
[<matplotlib.lines.Line2D at 0xa4ac7f0>]
Podemos incluso definir el color del texto en las leyendas con el argumento nombrado labelcolor:
In [30]: rc('axes', titlesize=20, labelsize=18, labelcolor='green')
SIZE = (6, 6)
[<matplotlib.lines.Line2D at 0xa733f60>]