Graficos Phyton
Graficos Phyton
Graficos Phyton
Agradecimientos
Introduccin
IPython y el modo pylab
pylab
Grfica simple
Valores por defecto
Instancias por defecto
Cambiar colores y grosor de lnea
Establecer lmites
Configurando graduacin de ejes
Configurando etiquetas graduadas
Moviendo spines
Agregando una leyenda
Anotaciones en puntos
Devil is in the details
Figuras, Subplots, Axes y Ticks
Figuras
Subplots
Ejes (axes)
Graduaciones (ticks)
Otros tipos de grficos: ejemplos y ejercicios
Grficos regulares
Grficos de dispersin (scatter)
Grfico de barras (bar)
Grficos de contorno
Imshow
Pie Charts
Quiver Plots
Cuadrculas (grids)
Grficos mltiples
Ejes polares
Grficos 3D
Texto
Ms all de este tutorial
Tutoriales
Documentacin Matplotlib
Cdigo de documentacin
Galeras
Lista de correos
Referencias rpidas
Propiedades de Lnea
Estilos de lnea
Marcadores
Colormaps
1.4.1. Introduccin
Matplotlib es probablemente el paquete de Python ms utilizado para grficos 2D. Proporciona una
manera muy rpida de visualizar datos y figuras con calidad de publicacin en varios formatos. Vamos
a explorar Matplotlib en modo interactivo cubriendo los casos ms comunes.
1.4.1.2. pylab
pylab proporciona una interfaz orientada a objetos a la biblioteca de trazado Matplotlib cercano a
Matlab(TM). Por tanto, la mayora de los comandos de trazado en pylab tiene anlogos Matlab(TM)
con similares argumentos. Comandos importantes se explican con ejemplos interactivos.
El primer paso es obtener los datos para las funciones seno y coseno
mport numpy as np
, S = np.cos(X), np.sin(X)
X es ahora un arreglo numpy con 256 valores que van desde - a + (incluido). C es la funcin coseno
(256 valores) y S es la funcin seno (256 valores).
Para ejecutar el ejemplo, teclee los comandos en una sesin interactiva IPython
ipython --pylab
o puede descargar cada uno de los ejemplos y ejecutarlo usando el intrprete estandar python
python exercice_1.py
Usted puede obtener el cdigo para cada paso haciendo clic en la figura correspondiente.
Documentacin
Tutorial pyplot
Comando plot()
Matplotlib viene con un conjunto de valores predeterminados que permiten la personalizacin de todos
los tipos de propiedades. Puede controlar los valores predeterminados de casi todas las propiedades
en matplotlib: tamao de figura y dpi, grosor de lnea, color y estilo, ejes , ejes y propiedades de
cuadrcula, propiedades de texto y fuente, etc.
mport pylab as pl
mport numpy as np
l.plot(X, C)
l.plot(X, S)
l.show()
Consejo
Documentacin
Personalizando matplotlib
En el siguiente script, hemos creado una instancia (y comentamos) todos los ajustes de la figura que
influyen en la aparicin del grfico. Los ajustes son explcitos para configurar los valores
predeterminados, pero usted puede jugar interactivamente con los valores para explorar su efecto
(ver `Line properties`_ y `Line styles`_ ms abajo).
mport pylab as pl
mport numpy as np
Graficar la funcin coseno con una lnea continua azul de 1 pixel de grosor
l.plot(X, C, color="blue", linewidth=1.0, linestyle="-")
Graficar la funcin coseno con una lnea continua verde de 1 pixel de grosor
l.plot(X, S, color="green", linewidth=1.0, linestyle="-")
Ticks en x
l.xticks(np.linspace(-4, 4, 9, endpoint=True))
Ticks en y
l.yticks(np.linspace(-1, 1, 5, endpoint=True))
Documentacin
Primer paso, queremos mostrar la funcin coseno en azul, la funcin seno en rojo y un lnea
ligeramente ms gruesa para ambas funciones. Tambin vamos a modificar el tamao para que sea
ligeramente ms horizontal.
..
l.figure(figsize=(10, 6), dpi=80)
l.plot(X, C, color="blue", linewidth=2.5, linestyle="-")
l.plot(X, S, color="red", linewidth=2.5, linestyle="-")
..
Documentacin
Comando xlim()
Comando ylim()
Debido a los lmites actuales la figura se muestra un poco ajustada, cambiamos los lmites con el fin
de ver con claridad todos los puntos.
..
l.xlim(X.min() * 1.1, X.max() * 1.1)
l.ylim(C.min() * 1.1, C.max() * 1.1)
..
Documentacin
Comando xticks()
Comando yticks()
Tick container
Tick locating and formatting
Los graduacin actual no es ideal, ya que no muestran los valores requeridos (+/-,+/-/2) para la
funcin seno y la funcin coseno. Los cambiamos de tal manera que slo muestren estos valores.
..
l.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi])
l.yticks([-1, 0, +1])
..
Documentacin
Las graduaciones estn correctamente colocadas, pero su etiqueta no es muy explcita. Podramos
suponer que 3.142 es pero es mejor hacerlo de forma explcita. Cuando establecemos los valores
de graduacin, tambin podemos proporcionar una etiqueta correspondiente en el segundo argumento
de la lista. Tenga en cuenta que vamos a utilizar ltex para permitir una buena renderizacin de la
etiqueta.
..
l.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
[r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])
l.yticks([-1, 0, +1],
[r'$-1$', r'$0$', r'$+1$'])
..
Consejo
Documentacin
Spines
Axis container
Transformations tutorial
Los spines son las lneas que unen las marcas de graduacin del eje y muestran los lmites de datos.
Se pueden colocar en posiciones arbitrarias, hasta ahora estaban en el borde del eje. Vamos a cambiar
eso, ya que queremos tener en el medio. Puesto que hay cuatro de ellos
(arriba/abajo/izquierda/derecha), vamos a descartar la parte superior y derecha al establecer su color
a ninguno y vamos a mover la parte inferior y la izquierdas para coordinar 0 en las coordenadas de
datos.
..
x = pl.gca() # gca stands for 'get current axis'
x.spines['right'].set_color('none')
x.spines['top'].set_color('none')
x.xaxis.set_ticks_position('bottom')
x.spines['bottom'].set_position(('data',0))
x.yaxis.set_ticks_position('left')
x.spines['left'].set_position(('data',0))
..
Consejo
Documentacin
Legend guide
legend() command
Legend API
Vamos a aadir una leyenda en la esquina superior izquierda. Esto slo requiere la adicin de la
palabra clave label (que se utilizar en el cuadro de la leyenda) en el comando plot.
..
l.plot(X, C, color="blue", linewidth=2.5, linestyle="-", label="cosine")
l.plot(X, S, color="red", linewidth=2.5, linestyle="-", label="sine")
l.legend(loc='upper left')
..
Consejo
Documentacin
Annotating axis
annotate() command
Vamos a anotar algunos puntos interesantes utilizando el comando de annotate. Elegimos el valor
2/3 y queremos anotar tanto en la funcin seno y el coseno. Haremos primero dibujar un marcador
en la curva, as como una lnea de puntos recta. A continuacin, vamos a utilizar el comando annotate
que muestra parte del texto con una flecha.
..
= 2 * np.pi / 3
l.plot([t, t], [0, np.cos(t)], color='blue', linewidth=2.5, linestyle="--")
l.scatter([t, ], [np.cos(t), ], 50, color='blue')
l.annotate(r'$sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$',
xy=(t, np.sin(t)), xycoords='data',
xytext=(+10, +30), textcoords='offset points', fontsize=16,
arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
l.annotate(r'$cos(\frac{2\pi}{3})=-\frac{1}{2}$',
xy=(t, np.cos(t)), xycoords='data',
xytext=(-90, -50), textcoords='offset points', fontsize=16,
arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
..
Documentacin
Artists
BBox
Las etiquetas graduadas ahora son apenas visibles debido a las lneas azules y rojas. Podemos
hacerlos ms grandes y tambin podemos ajustar sus propiedades, que van a estar renderizados en
un fondo blanco semi-transparente. Esto nos permitir ver tanto los datos y las etiquetas.
..
or label in ax.get_xticklabels() + ax.get_yticklabels():
label.set_fontsize(16)
label.set_bbox(dict(facecolor='white', edgecolor='None', alpha=0.65))
..
1.4.3.1. Figuras
Una figura es una ventana(s) en el GUI con ttulo Figure #. Las figuras estn numeradas a partir de
1, esto es claramente un estilo MATLAB. Existen varios parmetros que determinar que la figura se
vea as:
Argumento Por defecto Descripcin
num 1 nmero de figura
figsize figure.figsize tamao de figura en pulgadas (ancho, alto)
dpi figure.dpi resolucin en puntos por pulgada
facecolor figure.facecolor color de fondo del dibujo
edgecolor figure.edgecolor color del borde alrededor del fondo del dibujo
frameon True dibujar figura en marcos o no
Los valores por defecto se pueden especificar en el archivo de recursos y se utilizar la mayor parte
del tiempo. Slo el nmero de la figura se cambia con frecuencia.
Cuando se trabaja con la interfaz grfica de usuario se puede cerrar una figura haciendo clic en la X
de la esquina superior derecha. Sin embargo, se puede cerrar una figura llamando a close. Segn el
argumento para cerrar (1) la figura actual (sin argumento) , (2) una figura especfica (nmero de la
figura o instancia de figura es argumento ), o (3) todas las figuras (all es argumento).
Al igual que con otros objetos, tambin se puede establecer las propiedades de la figura con setp o
con el mtodo set_something.
1.4.3.2. Subplots
Con subplot puede organizar grficas en una cuadrcula regular. Es necesario especificar el nmero
de filas, columnas y el nmero del grfico. Tenga en cuenta que el comando gridspec es una
alternativa ms poderosa.
1.4.3.3. Ejes (axes)
Los ejes son muy similares a los subplots, permiten colocar grficos en cualquier ubicacin en la figura.
As que si queremos poner un grfico pequeo dentro de uno ms grande con los mismos ejes.
1.4.3.4. Graduaciones (ticks)
Las graduaciones con formato son una parte importante de los grficos listos para publicar. Matplotlib
ofrece un sistema totalmente configurable para graduaciones. Hay graduaciones localizadoras para
especificar dnde deben aparecer las graduaciones y graduaciones con formato para dar el aspecto
que desea a las graduaciones. Las graduaciones mayores y menores puede ser localizadas y
formateadas de forma independiente el uno del otro. Por defecto no se muestra la graduacin menor,
es decir, slo hay una lista vaca de ellos, ya que estan con NullLocator (ver a continuacin).
Las localizadoras de graduacin controlan las posiciones de las graduaciones. Ellas se establecen
como
x = pl.gca()
x.xaxis.set_major_locator(eval(locator))
Todos estos localizadores derivan de la clase base matplotlib.ticker.Locator. Usted puede hacer su
propio localizador derivandola de la clase base. Manipulacin de fechas con graduaciones puede ser
especialmente difcil. Por lo tanto, matplotlib proporciona localizadores especiales en matplotlib.dates.
A partir del cdigo de abajo, trate de reproducir el grfico en forma correcta tomando en cuenta las
zonas rellenadas
= 256
= np.linspace(-np.pi, np.pi, n, endpoint=True)
= np.sin(2 * X)
A partir del cdigo de abajo, trate de reproducir el grfico en forma correcta tomando en cuenta el
tamao de marcas, el color y la transparencia.
= 1024
= np.random.normal(0,1,n)
= np.random.normal(0,1,n)
l.scatter(X,Y)
A partir del cdigo de abajo, trate de reproducir el grfico en forma correcta agregando etiquetas en
las barras rojas.
= 12
= np.arange(n)
1 = (1 - X / float(n)) * np.random.uniform(0.5, 1.0, n)
2 = (1 - X / float(n)) * np.random.uniform(0.5, 1.0, n)
or x, y in zip(X, Y1):
pl.text(x + 0.4, y + 0.05, '%.2f' % y, ha='center', va='bottom')
l.ylim(-1.25, +1.25)
Consejo
A partir del cdigo de abajo, trate de reproducir el grfico en forma correcta tomando en cuneta el
colormap (ver Colormapsms abajo).
ef f(x, y):
return (1 - x / 2 + x ** 5 + y ** 3) * np.exp(-x ** 2 -y ** 2)
= 256
= np.linspace(-3, 3, n)
= np.linspace(-3, 3, n)
, Y = np.meshgrid(x, y)
1.4.4.5. Imshow
Consejo
= 10
= np.linspace(-3, 3, 4 * n)
= np.linspace(-3, 3, 3 * n)
, Y = np.meshgrid(x, y)
l.imshow(f(X, Y))
Debe modificar Z.
A partir del cdigo de abajo, trate de reproducir el grfico en forma correcta tomando en cuenta los
colores y el tamao de divisiones.
= np.random.uniform(0, 1, 20)
l.pie(Z)
Consejo
A partir del cdigo anterior, intente reproducir el grfico en la toma correcta tomando en cuenta los
estilos de lnea.
xes = pl.gca()
xes.set_xlim(0, 4)
xes.set_ylim(0, 3)
xes.set_xticklabels([])
xes.set_yticklabels([])
Consejo
Consejo
= 20
heta = np.arange(0., 2 * np.pi, 2 * np.pi / N)
adii = 10 * np.random.rand(N)
idth = np.pi / 4 * np.random.rand(N)
ars = pl.bar(theta, radii, width=width, bottom=0.0)
1.4.4.11. Grficos 3D
Consejo
ig = pl.figure()
x = Axes3D(fig)
= np.arange(-4, 4, 0.25)
= np.arange(-4, 4, 0.25)
, Y = np.meshgrid(X, Y)
= np.sqrt(X**2 + Y**2)
= np.sin(R)
1.4.4.12. Texto
Consejo
1.4.5.1. Tutoriales
Pyplot tutorial Artist tutorial
o Introduction o Introduction
o Controlling line properties o Customizing your objects
o Working with multiple figures and axes o Object containers
o Working with text o Figure container
Image tutorial o Axes container
o Startup commands o Axis containers
o Importing image data into Numpy arrays o Tick containers
o Plotting numpy arrays as images Path tutorial
Text tutorial o Introduction
o Text introduction o Bzier example
o Basic text commands o Compound paths
o Text properties and layout Transforms tutorial
o Writing mathematical expressions o Introduction
o Text rendering With LaTeX o Data coordinates
o Annotating text o Axes coordinates
o Blended transformations
o Using offset transforms to create a
shadow effect
o The transformation pipeline
User guide
FAQ
o Installation
o Usage
o How-To
o Troubleshooting
o Environment Variables
Screenshots
El cdigo est bien documentado y se puede acceder rpidamente a un comando especfico dentro
una sesin de python:
>>>
>> import pylab as pl
>> help(pl.plot)
elp on function plot in module matplotlib.pyplot:
lot(*args, **kwargs)
Plot lines and/or markers to the
:class:`~matplotlib.axes.Axes`. *args* is a variable length
argument, allowing for multiple *x*, *y* pairs with an
optional format string. For example, each of the following is
legal::
1.4.5.4. Galeras
La galera matplotlib es muy til cuando se busca la manera de hacer un grfico dado. Cada ejemplo
viene con su cdigo fuente.
Por ltimo, hay una lista de correo de usuarios donde se puede pedir ayuda y una lista de correo de
desarrolladores que es ms tcnica.
1.4.6.3. Marcadores
1.4.6.4. Colormaps
Todos los colormaps pueden invertirse aadiendo _r. Por ejemplo, gray_r es el inverso de gray.