Professional Documents
Culture Documents
NDICE GENERAL
ndice general
Aqu comenzamos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
10
Pyplot y lo bsico . . . . . . . . . . . . . .
Coordenadas rectangulares . . . . . . .
Etiquetas bsicas (xlabel, ylabel & title)
Estilos, colores y grosores de lneas . . .
Coordenadas polares . . . . . . . . . . .
Scatter Plots . . . . . . . . . . . . . . .
Grficas de barras . . . . . . . . . . . .
Grficas de pastel . . . . . . . . . . . .
12
13
15
16
19
20
20
20
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Versin incompleta
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Aqu comenzamos
Aqu comenzamos
Matplotlib es una librera de Python para el trazo de grficas, desarrollada inicialmente por John
Hunter. Tiene una sintaxis inspirada en MATLAB y comparte mucha similitud en las principales
funciones, aunque Matplotlib permite un desarrollo de grficas utilizando el enfoque orientado a
objetos, lo cual le convierte en una herramienta muy potente.
Versin incompleta
Lo anterior nos permitir disponer de todas las funciones de pylab dentro de nuestro script.
Luego, graficar nuestro primer ejemplo ser tan sencillo como escribir.
1
2
plot([1,-2,5,-2,1,0,3])
show()
Versin incompleta
La funcin plot, en el caso anterior, recibe como argumento un arreglo de valores numricos, que
puede ser un lista de Python ordinaria, una tupla, y de manera ms comn un array de NumPy. La
funcin show permite mostrar en pantalla la linea o grfica que se ha creado con plot.
Ahora, como se ha mencionado, pylab tambin permite utilizar funciones de NumPy para la
definicin de arrays. Por ejemplo, con linspace podemos crear un vector de valores numricos:
1
linspace(a,b,n)
Siendo a el extremo inferior, b el extremo superior, y n el nmero de particiones en el intervalo [a, b].
Por ejemplo:
1
2
>>> linspace(1,10,10)
array([ 1.,
2.,
3.,
4.,
5.,
6.,
7.,
8.,
9.,
10.])
Luego, a estos arrays de NumPy podemos aplicarles funciones matemticas predefinidas, por
ejemplo:
Versin incompleta
1
2
3
4
5
6
7
8
>>> x = linspace(0,2*pi,10)
>>> y = cos(x)
>>> x
array([ 0.
, 0.6981317 ,
3.4906585 , 4.1887902 ,
>>> y
array([ 1.
, 0.76604444,
-0.93969262, -0.5
,
1.3962634 ,
4.88692191,
2.0943951 ,
5.58505361,
2.7925268 ,
6.28318531])
0.17364818, -0.5
, -0.93969262,
0.17364818, 0.76604444, 1.
])
x = linspace(0,10)
y = cos(x)
plot(x,y)
show()
Versin incompleta
Note que a linspace no le hemos indicado el nmero de particiones del intervalo, con lo cual se
toma por default un valor de 50.
Podemos cambiar el color y estilo de lnea pasando una cadena de dos caracteres como tercer
argumento, donde el primer caracter indica el color y el segundo el smbolo a utilizar, por ejemplo:
1
2
3
4
x = linspace(0,10)
y = cos(x)
plot(x,y,"ro")
show()
Puede consultar los caracteres vlidos para el color y estilo de lnea en la documentacin de la
funcin plot.
Es posible tambin especificar el color y estilo utilizando keyword arguments dentro de la funcin
plot:
http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.plot
https://docs.python.org/2/tutorial/controlflow.html#keyword-arguments
Versin incompleta
plot(x,y,linestyle="--",color="k")
Adems, el color tambin puede especificarse utilizando la notacin RGBA y la notacin hexadecimal, por ejemplo, las siguientes instrucciones son equivalentes:
1
2
3
plot(x,y,color="r")
plot(x,y,color="#FF0000")
plot(x,y,color=(1,0,0,1))
Podemos incluir etiquetas en los ejes utilizando las funciones xlabel y ylabel. Por ejemplo:
1
2
3
4
5
6
7
8
K = 525
n = 0.2
e = linspace(0,0.5)
s = K*e**n;
plot(e,s,'m')
xlabel(u"Deformacin (mm/mm)")
ylabel(u"Esfuerzo (MPa)")
show()
Versin incompleta
K = 525
n = 0.2
e = linspace(0,0.5)
s = K*e**n;
plot(e,s,'m')
xlabel(r"$\varepsilon$ (mm/mm)")
ylabel(r"$\sigma$ (MPa)")
title(r"Acero SAE 1008: $\sigma = K \varepsilon^n$")
show()
Versin incompleta
Para poder graficar en dos o ms axes se puede utilizar la funcin subplot que permite crear un
arreglo de axes, vase el ejemplo a continuacin:
1
2
3
4
5
6
7
8
9
10
11
12
13
t = linspace(0,2)
x = 12*t**3 - 18*t**2 + 2*t + 5
v = diff(x)
# Grfica de posicin
subplot(2,1,1)
plot(t,x,"b")
ylabel(u"Posicin (m)")
# Grfica de velocidad
subplot(2,1,2)
plot(t[:-1],v,"g")
xlabel("Tiempo (s)")
ylabel(u"Velocidad (m/s)")
show()
Versin incompleta
Mltiples axes
La funcin subplot recibe tres argumentos, los dos primeros especifican el nmero de filas y
columnas del arreglo de axes, respectivamente, y el tercer argumento indica la posicin del axes
a utilizar. La funcin diff calcula la n-sima derivada numrica de un vector dado.
http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.diff.html
Versin incompleta
10
La manera bsica de crear un array es utilizando la funcin np.array, a la cual se debe pasar como
argumento una lista de valores numricos para definir un vector o bien una lista de listas para definir
matrices, por ejemplo:
1
>>> X=np.array([1,2,3])
>>> type(X)
<type 'numpy.ndarray'>
1 2 3
A = 4 5 6
7 8 9
se tiene que pasar una lista de listas como argumento, donde cada sublista representa una fila de la
matriz:
Versin incompleta
11
1
2
3
4
5
>>> A=np.array([[1,2,3],[4,5,6],[7,8,9]])
>>> A
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
Esta es la forma manual de crear un array en NumPy, definiendo uno a uno los elementos, lo
cual resultara pesado en arreglos de grandes dimensiones. NumPy proporciona algunas funciones
que permiten crear arrays con valores que siguen un patrn especifico, por ejemplo, valores en un
intervalo [a, b] con incrementos n, o bien cierta cantidad de elementos en un rango, o incluso arreglos
de ceros y unos.
La funcin que ms usaremos en este texto ser linspace, la cual permite crear un array de un cierto
nmero de elementos en un intervalo fijo. Por ejemplo:
1
2
>>> np.linspace(2,10,5)
array([ 2.,
4.,
6.,
8.,
10.])
>>> np.arange(2,10,2)
array([2, 4, 6, 8])
Note que arange no incluye el extremo superior, es decir, toma los valores del intervalo abierto por
la derecha [a, b).
Versin incompleta
12
Pyplot y lo bsico
Pyplot y lo bsico
En el Captulo 2 vimos una introduccin a pylab, un mdulo de matplotlib que integra las utilidades
grficas del mdulo pyplot y de la librera NumPy en un mismo espacio de nombres. El uso de pylab
hace recordar mucho la sintaxis y la filosofa de programacin de MATLAB. Por ello (y por razones
que iremos conociendo posteriormente) en el entorno de Matplotlib es preferible utilizar pyplot
y NumPy cmo mdulos independientes, permitiendo una estructuracin ms limpia de cdigo,
diferenciando la parte de proceso de datos y la de graficacin/visualizacin.
Un cdigo tpico utilizando pylab sera:
1
2
3
4
5
6
7
8
9
Versin incompleta
13
Pyplot y lo bsico
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Y s, en este texto vamos a utilizar esta manera de hacer las cosas, la diferencia?: objetos, mtodos
y esas cosas propias de la programacin orientada a objetos, que nos permitir organizar nuestro
cdigo de una mejor manera, sobre todo cuando este tiende a ser extenso. De manera breve, lo que se
hace es instanciar un objeto de la clase Figure, que es bsicamente el objeto grfico principal o lo que
denominaramos como ventana, y posteriormente se utilizan mtodos de clase para crear un Axes y
utilizar sus mtodos para trazar la grfica correspondiente y las etiquetas o leyendas necesarias.
Para las secciones siguientes se asumir que en todo momento se han importado el mdulo pyplot
y NumPy y que al final del cdigo se ha incluido la instruccin plt.show() para mostrar lo que se ha
graficado.
1
2
3
4
5
6
Coordenadas rectangulares
Hemos estado utilizando este tipo de grficas en todos los ejemplos anteriores, entendemos por
coordenadas rectangulares aquellas en donde cada punto del plano o espacio est dado por sus
coordenadas (x,y) o (x,y,z) y las cuales hemos tenido hasta en la sopa desde nuestro primer curso de
lgebra en el nivel secundario. Por ahora vamos a tomar el caso bidimensional, y en la mayora de
situaciones vamos a graficar un array que contiene los valores de la variable independiente (digamos
x) contra un array que contiene los valores de la variable dependiente (digamos f(x)), utilizando, claro
est, la funcin plot.
Versin incompleta
14
Pyplot y lo bsico
Por ejemplo supongamos que queremos graficar la funcin f (x) = x2 sin(x) en el intervalo [0, 2].
Primero debemos crear el vector o array de la variable independiente en el intervalo de inters, para
ello podemos utilizar linspace:
1
x = np.linspace(0,2*np.pi)
y = (x**2)*(np.sin(x))
fig = plt.figure()
ax = fig.add_subplot(111)
Con nuestro axes creado, podemos utilizar el mtodo plot para trazar la grfica correspondiente:
1
ax.plot(x, y)
Finalmente debemos utilizar la instruccin plt.show() para mostrar las grficas que hemos
generado. Juntando todo el cdigo anterior se tiene:
1
2
3
4
5
6
7
x = np.linspace(0,10)
y = np.cos(x)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x, y)
Versin incompleta
15
Pyplot y lo bsico
Versin incompleta
16
Pyplot y lo bsico
1
2
3
4
5
6
7
8
9
10
Versin incompleta
17
Pyplot y lo bsico
1
2
3
4
5
6
7
8
9
10
x = np.linspace(0,10)
y = np.cos(x)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x,
ax.plot(x,
ax.plot(x,
ax.plot(x,
y, linestyle="-")
y+1, ls="--")
y+2, ls="-.")
y+3, ls=":")
Note que el keyword argument linestyle puede abreviarse como ls y sigue funcionando correctamente.
Los colores de una lnea pueden indicarse utilizando el keyword argument color y pasndole en
este una cadena hexadecimal o bien una tupla de tres valores con los valores correspondientes al
modelo RGB.
Versin incompleta
18
Pyplot y lo bsico
1
2
3
4
5
6
7
8
x = np.linspace(0,10)
y = np.cos(x)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x, y, color=(0,1,1))
ax.plot(x, y+1, color="#ff00ff")
El grosor de una lnea se establece mediante el argumento linewidth o su forma abreviada lw.
1
2
3
4
5
6
7
8
9
x = np.linspace(0,10)
y = np.cos(x)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x, y, lw=2)
ax.plot(x, y+1, lw=4)
ax.plot(x, y+2, linewidth=6)
Versin incompleta
19
Pyplot y lo bsico
Tanto el color (con ciertas limitaciones) como el estilo pueden especificarse como un tercer
argumento en el mtodo plot sin necesidad de utilizar keyword arguments:
1
ax.plot(x, y, "r--")
Donde lo anterior le indica a Matplotlib que debe trazar una lnea discontinua de color rojo. Sin
embargo est limitado a unos cuantos colores predeterminados que puede encontrar en la siguiente
referencia.
Coordenadas polares
Para trazar grficas en coordenadas polares en Matplotlib se utiliza tambin el mtodo plot, pero
cuando se crea el axes debemos cambiar el tipo de proyeccin que utilizaremos a coordenadas
polares, lo cual puede hacerse de las utilizando el keyword argument projection:
1
2
fig = plt.figure()
polar_axes = fig.add_subplot(111, projection="polar")
http://matplotlib.org/api/colors_api.html
Versin incompleta
20
Pyplot y lo bsico
1
2
fig = plt.figure()
polar_axes = fig.add_subplot(111, polar=True)
theta = np.linspace(0,2*np.pi,1000)
r = 0.25*np.cos(3*theta)
fig = plt.figure()
ax = fig.add_subplot(111, polar=True)
ax.plot(theta, r)
Scatter Plots
Grficas de barras
Grficas de pastel
Versin incompleta