You are on page 1of 11

Matplotlib para grficas de alta calidad (Parte 2)

In [4]: from IPython.display import Image


Image('http://matplotlib.org/_static/logo2.png')
Out[4]:

Mltiples grficas en una sla figura


Podemos incluir multiples grficas en una misma figura empleando varias veces la funcin plot, donde cada llamada
corresponde a una funcin diferente. Retomemos la variable x de la parte 1.
In [53]: x0, xf, dx = -30, 30, 0.1
x = arange(x0, xf, dx)

# Punto inicial, punto final, espaciamiento entre puntos

Ahora bien, graficaremos dos funciones trigonomtricas: el seno y el coseno. Por lo tanto necesitamos evaluar ambas funciones
en x, y almacenar el resultado en dos variables:
In [54]: y1 = sin(x)
y2 = cos(x)

# Datos de la funcin seno


# Datos de la funcin coseno

Ahora s, graficamos de la misma manera en que lo hemos hecho anteriormente.


In [34]: SIZE = (12, 6)

# Figura de 12x6 pulgadas.

# Establecemos el tamao del texto en general, del ttulo y de las leyendas.


rc('font', size=12)
rc('axes', titlesize=20, labelsize=18)
# Ahora creamos la figura con el tamao y dpi especificado.
fig1 = figure(figsize=SIZE)
grid(True)
title(u'Mltiples grficas')
xlabel('x')
ylabel('sin(x), cos(x)')
xlim(-20, 20)
ylim(-2.5, 1.5)
# Plot correspondiente a la grfica del , variable y1
plot(x, y1, marker='D', color='#CC3399')
# Plot correspondiente a la grfica del coseno, variable y2
plot(x, y2, marker='o', color='cyan')

Out[34]:

[<matplotlib.lines.Line2D at 0x77d1320>]

En este ejemplo hemos graficado la funcin seno con marcadores en forma de diamante con el color #CC3399. La funcin
coseno, para diferenciarla, la graficamos con marcadores circulares de color cyan.

Leyendas para cada curva


Podemos agregar una leyenda que indique visualmente que significa cada curva. Para esto empleamos el argumento nombrado
label en la funcin plot. De esta manera definimos una etiqueta para cada curva. Despus de haber graficado todas las curvas
usamos la funcin legend para aadir la leyenda. Esta vez no utilizaremos marcadores para las curvas, as que omitiremos el
argumento nombrado marker.
In [35]: SIZE = (12, 6)

# Figura de 12x6 pulgadas.

# Establecemos el tamao del texto en general, del ttulo y de las leyendas.


rc('font', size=12)
rc('axes', titlesize=20, labelsize=18)
# Ahora creamos la figura con el tamao y dpi especificado.
fig1 = figure(figsize=SIZE)
grid(True)
title(u'Mltiples grficas')
xlabel('x')
ylabel('sin(x), cos(x)')
xlim(-20, 20)
ylim(-2., 1.5)
# Plot correspondiente a la grfica del , variable y1, con leyenda 'sin(x)'
plot(x, y1, linewidth=2, color='#CC3399', label='sin(x)')
# Plot correspondiente a la grfica del coseno, variable y2, con leyenda 'cos(x)'
plot(x, y2, linewidth=2, color='cyan', label='cos(x)')
# Creamos la leyenda, indicando su posicin
legend(loc='best')

Out[35]:

<matplotlib.legend.Legend at 0xcc6ffd0>

En el caso de la funcin legend, se le puede pasar el argumento nombrado loc para indicar donde debe colocarse la leyenda.
Este argumento es una cadena de texto donde se indica la posicin. Hay varias opciones para la posicin: best trata de
encontrar la mejor posicin tomando en cuenta el espacio en blanco en a figura; upper right, lower right, upper left,
lower left, center left, center right, lower center, upper center colocan la leyenda en la posicin indicada. Para ver
toda la documentacin de la funcin legend se puede visitar este enlace. Por ejemplo, si queremos la leyenda en la esquina
superior derecha usamos loc='upper right':
In [55]: SIZE = (12, 6)

# Figura de 12x6 pulgadas.

# Establecemos el tamao del texto en general, del ttulo y de las leyendas.


rc('font', size=12)
rc('axes', titlesize=20, labelsize=18)
# Ahora creamos la figura con el tamao y dpi especificado.
fig1 = figure(figsize=SIZE)
grid(True)
title(u'Mltiples grficas')
xlabel('x')
ylabel('sin(x), cos(x)')
xlim(-20, 20)
ylim(-2., 1.5)
# Plot correspondiente a la grfica del , variable y1, con leyenda 'sin(x)'
plot(x, y1, linewidth=2, color='#CC3399', label='sin(x)')
# Plot correspondiente a la grfica del coseno, variable y2, con leyenda 'cos(x)'
plot(x, y2, linewidth=2, color='cyan', label='cos(x)')
# Creamos la leyenda, indicando su posicin
legend(loc='upper left')

Out[55]:

<matplotlib.legend.Legend at 0x10a590b8>

Es claro que esta no es la mejor posicin porque la leyenda se encima con las curvas, pero ilustra el efecto.
Agreguemos una tercer grfica, la de la funcion tangente:
In [22]: y3 = tan(x)

In [37]: SIZE = (12, 8)

# Figura de 12x6 pulgadas.

# Establecemos el tamao del texto en general, del ttulo y de las leyendas.


rc('font', size=12)
rc('axes', titlesize=20, labelsize=18)
# Ahora creamos la figura con el tamao y dpi especificado.
fig1 = figure(figsize=SIZE)
grid(True)
title(u'Mltiples grficas')
xlabel('x')
ylabel('sin(x), cos(x)')
xlim(-10, 10)
ylim(-2., 1.5)
# Plot correspondiente a la grfica del , variable y1, con leyenda 'sin(x)'
plot(x, y1, linewidth=2, color='#CC3399', label='sin(x)')
# Plot correspondiente a la grfica del coseno, variable y2, con leyenda 'cos(x)'
plot(x, y2, linewidth=2, color='cyan', label='cos(x)')
# Plot correspondiente a la grfica del tangente, variable y3, con leyenda 'tan(x)'
plot(x, y3, linewidth=2, color='yellow', label='tan(x)')
# Creamos la leyenda, indicando su posicin
legend(loc='best')

Out[37]:

<matplotlib.legend.Legend at 0xce1d7f0>

Definiendo funciones arbitrarias para graficar


Hasta ahora hemos utilizado las funciones elementales para graficar. Sin embargo tambin podemos graficar funciones
arbitrarias, definidas por nosotros mismos. Para esto tenemos que definir la funcin que queremos graficar, de la manera usual:
In [38]: def f1(x):
"""Funcin a graficar"""
y = x*sin(x)
return y

Esta funcin implementa la funcin matemtica


funcin en dicho intervalo:

f (x) = x sin(x) . Definimsos el intervalo en x que graficaremos y evaluamos la

In [41]: x0, xf, dx = -100, 100, 0.1


x = arange(x0, xf, dx)
y = f1(x)

Su grfica es la siguiente:
In [52]: SIZE = (12, 8)

# Figura de 12x6 pulgadas.

# Establecemos el tamao del texto en general, del ttulo y de las leyendas.


rc('font', size=12)
rc('axes', titlesize=20, labelsize=18)
# Ahora creamos la figura con el tamao y dpi especificado.
fig1 = figure(figsize=SIZE)
grid(True)
title(u'Funcin definida por usuario')
xlabel('x')
ylabel('f1(x) = x sin(x)')
# Definimos el intervalo en x, ms no en y
xlim(-60, 60)
# Plot correspondiente a la grfica del , variable y1, con leyenda 'sin(x)'

plot(x, y, linewidth=2, color='#CC3399', label='f1(x)')


Out[52]:

[<matplotlib.lines.Line2D at 0x10a27908>]

En este ejemplo hemos definido el intervalos en x a visualizar, ms no el intervalo en y . En este caso matplotlib elige el mejor
intervalo en y segn los mismos valores que toma la funcin.

Grficas de dispersin
Hay veces que queremos graficar nicamente puntos que no pertenecen a una funcin, sino que son slo parejas de datos (x, y)
obtenidas por algn procedimiento desconocido.
Para esto existe una funcin en matplotlib: scatter. La funcin scatter se usa de manera muy similar a plot, es decir, se le
pasan las coordenadas x de los puntos, las coordenadas y y otra serie de argumentos similares a plot.
Por ejemplo, hagamos una grafica de puntos aleatorios. Generaremos una cantidad dada de nmeros aleatorios en el intervalo
[0, 1) con la funcin random_sample tanto para x como para y , y los graficaremos.
In [5]: num_puntos = 1000
x = random_sample(num_puntos)
y = random_sample(num_puntos)
Ahora hagamos la grfica de dispersin:
In [20]: SIZE = (12, 8)

# Figura de 12x6 pulgadas.

# Establecemos el tamao del texto en general, del ttulo y de las leyendas.


rc('font', size=12)
rc('axes', titlesize=20, labelsize=18)

# Ahora creamos la figura con el tamao y dpi especificado.


fig1 = figure(figsize=SIZE)
grid(True)
title(u'Grfica de nmeros aleatorios')
xlabel('x')
ylabel('y')
# No necesitamos especificar ningn lmite en x ni en y
# Hacemos la grfica de dispersin
scatter(x, y, color='#CC3399')
Out[20]:

<matplotlib.collections.PathCollection at 0xb6ea5c0>

Se puede especficar el color de la misma manera que en plot: con el argumento nombrado color. Los valores de color se
pueden especficar de la misma manera que en plot:
In [18]: # Hacemos la grfica de dispersin
scatter(x, y, color='r')
Out[18]:

<matplotlib.collections.PathCollection at 0xa593748>

In [21]: # Hacemos la grfica de dispersin


scatter(x, y, color='cyan')
Out[21]:

<matplotlib.collections.PathCollection at 0xb93ae80>

Ademas podemos cambiar la forma de los marcadores con el argumento nombrado marker, al igual que se hizo con plot. Por
ejemplo, para usar marcadores verdes en forma de diamante:
In [23]: # Hacemos la grfica de dispersin
scatter(x, y, color='green', marker='D')
Out[23]:

<matplotlib.collections.PathCollection at 0xbe95cf8>

Podemos cambiar el tamao de los marcadores con el argumento nombrado s. Este es un real que especifica el rea del
marcador en puntos al cuadrado.
In [34]: scatter(x, y, color='#CC3399', marker='D', s=50)
Out[34]:

<matplotlib.collections.PathCollection at 0xd75fbe0>

In [37]: scatter(x, y, color='#CC3399', marker='D', s=10)


Out[37]:

<matplotlib.collections.PathCollection at 0xdc5e160>

Finalmente podemos darle un agradable efecto de transparencia a los puntos empleando el argumento nombrado alpha. El valor
de alpha debe ser un real entre 0 y 1, donde cero representa transparencia total, y uno significa que el marcador es totalmente
opaco.
In [38]: scatter(x, y, color='#CC3399', marker='D', s=50, alpha=0.5)

Out[38]:

# Marcadores semitransparentes

<matplotlib.collections.PathCollection at 0xdf2d8d0>

Mltiples grficas de dispersin


Al igual que con plot, si queremos graficar ms de un conjunto de datos tenemos que usar la funcin scatter para cada uno de
ellos. Por ejemplo, para graficar dos conjuntos de nmeros aleatorios:

In [24]: num_puntos = 300


x1 = random_sample(num_puntos)
y1 = random_sample(num_puntos)
x2 = random_sample(num_puntos)
y2 = random_sample(num_puntos)

In [45]: SIZE = (12, 8)

# Figura de 12x6 pulgadas.

# Establecemos el tamao del texto en general, del ttulo y de las leyendas.


rc('font', size=12)
rc('axes', titlesize=20, labelsize=18)
# Ahora creamos la figura con el tamao y dpi especificado.
fig1 = figure(figsize=SIZE)
grid(True)
title(u'Grfica de nmeros aleatorios')
xlabel('x')
ylabel('y')
# No necesitamos especificar ningn lmite en x ni en y
# Hacemos la grfica de dispersin
scatter(x1, y1, color='#CC3399', s=200, alpha=0.5)
scatter(x2, y2, color='cyan', s=200, alpha=0.5)

Out[45]:

# rea de 200 puntos cuadrados, semitra


# rea de 200 puntos cuadrados, semitra

<matplotlib.collections.PathCollection at 0x1066b2e8>

Al igual que con la funcin plot podemos especificar una etiqueta para cada serie de datos con el argumento nombrado label,
y agregar un leyenda con la funcin legend.
In [46]: SIZE = (12, 8)

# Figura de 12x6 pulgadas.

# Establecemos el tamao del texto en general, del ttulo y de las leyendas.


rc('font', size=12)
rc('axes', titlesize=20, labelsize=18)
# Ahora creamos la figura con el tamao y dpi especificado.
fig1 = figure(figsize=SIZE)
grid(True)
title(u'Grfica de nmeros aleatorios')
xlabel('x')
ylabel('y')
# No necesitamos especificar ningn lmite en x ni en y
# Hacemos la grfica de dispersin con etiquetas
scatter(x1, y1, color='#CC3399', s=200, alpha=0.5, label=u'Serie 1')
scatter(x2, y2, color='cyan', s=200, alpha=0.5, label=u'Serie 2')
legend(loc='best')

Out[46]:

In [ ]:

<matplotlib.legend.Legend at 0x107b53c8>

# rea de 200 puntos


# rea de 200 puntos

You might also like