Introducci´on a la Computaci´ on Matplotlib y otros graficadores Maximiliano Geier Facultad de Ciencias Exactas y Naturales, UBA 5/06/2014 Maximiliano Geier (UBA) Clase 20: Matplotlib y otros graficadores 5/06/2014 1 / 19 0 0.org/notebook.enthought.Matplotlib Matplotlib Paquete de software libre desarrollado originalmente por John D. Hunter (1968–2012) y cientos de colaboradores voluntarios alrededor del mundo.html http://code.5 1.0 0.2 0.0 0. Hunter era un obsesivo y no le gustaban los gr´ aficos de MATLAB.0 1.2 0. 1 2 1. Como est´ a hecho en Python. Adem´ as. Pensado como un reemplazo libre del MATLAB hecho en Python.0 0.4 0. se integra f´ acilmente con otras herramientas de visualizaci´ on de datos que tambi´ en est´ an en Python (como el IPython Notebook1 o Mayavi2 ).com/projects/mayavi/ Maximiliano Geier (UBA) Clase 20: Matplotlib y otros graficadores 5/06/2014 3 / 19 .5 0.5 http://ipython.6 1.4 0.0 0.6 0.5 0.0 0. as´ı que los de Matplotlib son (en general) visualmente m´ as atractivos. pyplot as plt import numpy as np with plt. Tiene un m´ odulo para graficaci´ on llamado pylab.com/418/ fig = plt.add_axes((0. Un ejemplo3 : import matplotlib.spines[’right’].xkcd(): # Based on "Stove Ownership" from XKCD by Randall Monroe # http://xkcd.figure() ax = fig.spines[’top’]. ha=’center’) 3 http://matplotlib.1.text(0.arange(30) plt.5.8.yticks([]) ax.set_ylim([-30. xy=(70.xticks([]) plt. 0. -10)) plt. Para manejar datos hace uso extensivo de la biblioteca de ´ algebra lineal numpy. 0. los scripts para graficar se escriben enteramente en Python.ylabel(’MY OVERALL HEALTH’) fig.annotate(’’’THE DAY I REALIZED I COULD COOK BACON\nWHENEVER I WANTED’’’.ones(100) data[70:] -= np.xlabel(’TIME’) plt.7)) ax.set_color(’none’) ax. 10]) data = np. 1). ’"STOVE OWNERSHIP" FROM XKCD BY RANDALL MONROE’.py Maximiliano Geier (UBA) Clase 20: Matplotlib y otros graficadores 5/06/2014 4 / 19 .2. arrowprops={’arrowstyle’:’->’}. xytext=(15.set_color(’none’) plt.plot(data) plt.org/mpl_examples/showcase/xkcd. 0.05. que se programa de una manera similar a MATLAB (es una m´ aquina de estados).Matplotlib Matplotlib En lugar de usar su propio lenguaje como MATLAB. 0. 0 0.title(’Hello.0 Construimos vectores para las coordenadas x e y: voltaje (mV) 2 0.plot(x. 1 Importamos el m´ odulo de graficaci´ on de matplotlib y numpy: import matplotlib.sin(2*np.0 0.01) aplico sin(2π t) a cada elemento t del vector x = np. world! 1. 2. world! Vamos a escribir un plot muy sencillo de una funci´ on en dos dimensiones. world!’) plt.0 plt. y) 5 Hello.Matplotlib Hello.pi*x) T´ıtulo y etiquetas para los ejes: plt.0 Podemos mostrar la figura en pantalla: plt. 0.show() 6 Tambi´ en guardarla en un archivo: plt.ylabel(’voltaje (mV)’) 4 0.savefig(’hello.0 tiempo (s) 1.5 0.arange(0.5 Graficamos y en funci´ on de x: 1.pyplot as plt import numpy as np # x # # y 3 como range = np.xlabel(’tiempo (s)’) plt.5 2.pdf’) Maximiliano Geier (UBA) Clase 20: Matplotlib y otros graficadores 5/06/2014 5 / 19 .5 1. ’) # CSV 2 Formato numpy (generado con np.npy’) 3 Im´ agenes: img = plt. sino un conjunto de datos que tenemos guardados en alg´ un lado.loadtxt(’archivo. 1 Archivos de texto con tuplas de n´ umeros. Tambi´ en se puede usar el paquete pandas4 para cargar planillas de Excel directamente. una tupla por l´ınea: datos = np.com/a/17053360 Maximiliano Geier (UBA) Clase 20: Matplotlib y otros graficadores 5/06/2014 6 / 19 .loadtxt(’archivo. delimiter=’.load(’archivo.png’) 4 4 Excel: lo m´ as sencillo es exportar los datos de Excel a CSV (desde el mismo Excel). http://stackoverflow. Matplotlib nos ofrece (a trav´es de numpy) ciertas comodidades para cargar datos de archivos.csv’.save): datos = np.imread(’archivo.Matplotlib Cargando datos En general lo que vamos a querer graficar no es una funci´ on conocida.txt’) # separados por espacios datoscsv = np. hay que usar datos[:. plt. Esto quiere decir que si modificamos datos[:.plot(datos[:.0].copy().1:]) 3 Si queremos agregar una label a cada plot y luego plt. datos[:. Maximiliano Geier (UBA) Clase 20: Matplotlib y otros graficadores 5/06/2014 7 / 19 . 1 En varios plots: datos = np.2].0].1].0].legend() leyenda describiendo cada curva. label=’D&C’) datos[:.2]) 2 Un solo plot: plt.0] el cambio tambi´en se ve en datos. datos[:. label=’Fuerza bruta’) Nota de implementaci´ on: elegir filas o columnas de un conjunto de datos de numpy se hace por referencia.plot(datos[:.0].Matplotlib Graficando varios sets de datos Supongamos que tenemos un archivo con datos donde cada fila tiene 3 columnas y queremos graficar la segunda en funci´ on de la primera y la tercera en funci´ on de la primera en un mismo gr´ afico.plot(datos[:.loadtxt(’datos.plot(datos[:.1]) plt. tenemos que ponerle un generamos la leyenda: datos[:.plot(datos[:. datos[:.0].0]. plt.txt’) plt. Si queremos una copia. ’bo’) Tiene muchas opciones.plot(x. linestyle=’--’) # color azul y redondeles en cada punto del set de datos plt.plot tiene opciones que permiten configurar c´ omo se ven las curvas. Matplotlib dibuja con l´ıneas llenas y colores asignados de forma autom´ atica. y.Matplotlib Cambiando el formato Si no le decimos nada. linewidth=2. y. y. color=’red’. La funci´ on plt.plot) Maximiliano Geier (UBA) Clase 20: Matplotlib y otros graficadores 5/06/2014 8 / 19 .5) # l´ ınea punteada plt.plot(x. Pueden ver help(plt. de forma que no se pisen las l´ıneas entre s´ı.plot(x. Algunos ejemplos: # l´ ıneas m´ as gruesas de color rojo plt. Si los defaults no se ven bien.pi/2.ylim(y.max()*1. np. 0. Estos l´ımites dependen de los valores extremos de los vectores.pi. 0 y 1 en el eje y plt. x.min()*1.xlim(x.pi/2. y. np.pi]) # valores -1.1.1. los podemos modificar: # ploteamos plt. y) # para que se vea un 10% m´ as de valores a cada lado en ambos ejes # (asumiendo que los m´ ınimos son negativos y los m´ aximos positivos) plt. 1]) Maximiliano Geier (UBA) Clase 20: Matplotlib y otros graficadores 5/06/2014 9 / 19 .min()*1.yticks([-1.1) plt. 0.max()*1.plot(x.xticks([-np.1) # mostramos los valores desde −π hasta π en el eje x plt. -np.Matplotlib Cambiando propiedades de los ejes Cuando hacemos un plot nuevo Matplotlib nos setea valores default para los l´ımites de los ejes y los ticks (los valores que muestra sobre cada eje). 4.0 (default. Apr 11 2014.4. "copyright". Desde la consola normal de Python: mgeier@xpsmax:~$ python3 Python 3.2] on linux Type "help". >>> import matplotlib. "credits" or "license" for more information.Matplotlib Usando Matplotlib Matplotlib se puede usar interactivamente desde la consola de Python o desde un programa.pyplot as plt >>> import numpy as np Desde la consola de IPython: mgeier@xpsmax:~$ ipython3 --pylab Python 3.0 (default.8. 13:05:11) Type "copyright". Using matplotlib backend: TkAgg In [1]: Maximiliano Geier (UBA) Clase 20: Matplotlib y otros graficadores 5/06/2014 10 / 19 . 13:05:11) [GCC 4. Apr 11 2014. "credits" or "license" for more information. 34 -0.005 0.00 Clase 20: Matplotlib y otros graficadores 1.0% 0.10 0.20 0.0% 10.05 0.hist 0.20 15.05 0.8 2 6 4 0 2 0 2 4 2 4 6 6 5/06/2014 4 1.00 0.2 0.000 40 Gr´ aficos de barra: plt.025 0 60 80 100 120 Smarts 140 160 Logs Frogs A 0.15 0.plot_surface 2 6 4 0 20 2 4 2 4 6 6 Maximiliano Geier (UBA) 0.0 6 11 / 19 .0% 45.05 0.scatter Superficie 3D: plt.010 20 15 10 5 0.020 Histogramas: plt.2 0.bar Scores by group and gender Men Women 40 0.2 0.015 0.10 Gr´ aficos de torta: plt.79 0.6 1.0% Dogs 0.11 -0.56 -0.030 Histogram of IQ: µ =100.pie Hogs 30.15 0. σ =15 35 30 25 Scores Probability 0.6 0.2 0.79 -1.10 0.6 0.Matplotlib Otros tipos de plots 0.4 0.25 ∆i Scatter plot (puntos sobre un plano): plt.10 0.15 ∆i +1 0.11 -0.34 0.0 0.4 0.25 B C Group D E Volume and percent change 0.01 0.8 0.05 0.6 0.01 6 4 0.0 0.15 0.56 0. A diferencia de Matplotlib. usa su propio lenguaje especializado en graficar figuras. Maximiliano Geier (UBA) Clase 20: Matplotlib y otros graficadores 5/06/2014 13 / 19 .Gnuplot Gnuplot Uno de los primeros sistemas de graficaci´ on scripteables. funciona en la mayor´ıa de los sistemas operativos. svg. Actualmente es el m´ as usado de los graficadores de este tipo. Soporta salidas en distintos formatos por medio de sus muchos terminal drivers: qt. etc. tikz. windows. Desarrollado originalmente por Colin Kelly y Thomas Williams en 1986. pdf. Varios programas lo utilizan como motor de graficaci´ on (por ejemplo QtiPlot). latex. png. canvas. 6 (Opcional) Si queremos guardar la figura en un PDF: -0.2 -0. world! 1 sin(2*pi*x) 0.8 -1 0 0. world! Vamos a ver c´ omo se escribe el mismo plot de antes en gnuplot: 1 T´ıtulo y textos de los ejes: set title "Hello.2 -0.5 1 1.4 set xrange [0:2] 3 Graficamos: 0 -0.4 plot sin(2*pi*x) 4 0.Gnuplot Hello. Se puede forzar su cierre con set output sin ning´ un nombre.8 0.pdf" replot Nota de implementaci´ on: la salida a PDF no guarda el archivo hasta que no es “cerrado”.6 Rango del eje X: voltaje (mV) 0. world!" set xlabel "tiempo (s)" set ylabel "voltaje (mV)" 2 Hello. Maximiliano Geier (UBA) Clase 20: Matplotlib y otros graficadores 5/06/2014 14 / 19 .5 2 tiempo (s) set term pdf set output "figura. with lines: plotear un conjunto de puntos predeterminadamente nos marca solo los puntos. Si queremos repetir el mismo plot en gnuplot. title <texto>: pone <texto> como label de ese conjunto de datos o funci´ on. Maximiliano Geier (UBA) Clase 20: Matplotlib y otros graficadores 5/06/2014 15 / 19 .txt’ using 1:3 with lines title ’Fuerza bruta’ plot: soporta varios argumentos separados por comas. cada uno es una funci´ on o conjunto de puntos a graficar. using N:M: usa las columnas especificadas del dataset. podemos cargar los datos directamente desde el comando plot: plot ’datos. Al igual que en Matplotlib.txt’ using 1:2 with lines title ’D&C’.Gnuplot Graficando datos de un archivo Volvamos al ejemplo del archivo de datos con 3 columnas. \ ’datos. la funci´ on plot tiene muchos modificadores para cambiar la apariencia de los gr´ aficos. 6 patchlevel 4 last modified 2013-10-02 Build System: Linux x86_64 Terminal type set to ’wxt’ gnuplot> En el modo batch escribimos un script con todos los comandos y luego gnuplot los lee l´ınea por l´ınea. En el modo interactivo escribimos los comandos en la consola.Gnuplot Usando gnuplot Gnuplot se puede usar interactivamente o en modo batch. mgeier@xpsmax:~$ gnuplot hello.gpi Maximiliano Geier (UBA) Clase 20: Matplotlib y otros graficadores 5/06/2014 16 / 19 . mgeier@xpsmax:~$ gnuplot G N U P L O T Version 4. org/wiki/List_of_graphing_software Maximiliano Geier (UBA) Clase 20: Matplotlib y otros graficadores 5/06/2014 18 / 19 .NET. SAS: lenguaje propio. Origin: lenguaje propio (imperativo). Lista completa: http://en. se programa en C++ (tambi´en orientado a objetos). ROOT: paquete de an´ alisis de datos desarrollado en CERN. tambi´en se puede usar desde Python y VB.Otros graficadores Otros graficadores scripteables Software libre: GNU Octave: alternativa libre al MATLAB. SPSS: lenguaje propio.wikipedia. lenguaje propio orientado a objetos. usa un formato de scripting bastante compatible. Software propietario: MATLAB: lenguaje propio (imperativo). Maple: lenguaje propio (imperativo). R: paquete estad´ıstico. pdf Maximiliano Geier (UBA) Clase 20: Matplotlib y otros graficadores 5/06/2014 19 / 19 .org/examples/mplot3d/index.org/NumPy_for_Matlab_Users Ejemplos de gnuplot: http://gnuplot.gnuplot.fr/~rougier/teaching/matplotlib/ Ejemplos 2D: http://matplotlib.sourceforge.scipy.loria.info/docs_4.pdf gnuplot Quick Reference: http://www.sourceforge.net/demo/ Gu´ıa de usuario (gnuplot): http://gnuplot.1.net/docs_cvs/gnuplot.html#mplot3d-examples-index Gu´ıa de usuario (Matplotlib): http://matplotlib.8.Otros graficadores Referencia adicional Tutorial de Matplotlib: http://www.pdf Gu´ıa de usuario (NumPy): http://docs.org/doc/numpy/numpy-ref-1.scipy.0/gpcard.html Ejemplos 3D: http://matplotlib.com/questions/tagged/matplotlib NumPy for Matlab Users: http://wiki.org/Matplotlib.pdf Stackoverflow: http://stackoverflow.org/users/screenshots.
Report "Introduccion a la Computacion, Matplotlib y otros graficadores"