Professional Documents
Culture Documents
on a la Computaci
on
5/06/2014
5/06/2014
1 / 19
Matplotlib
Matplotlib
1
2
1.0 0.5
0.0
0.5
1.0 1.0
0.6
0.4
0.2
0.0
0.2
0.4
0.6
1.0
0.5
0.0
0.5
http://ipython.org/notebook.html
http://code.enthought.com/projects/mayavi/
Maximiliano Geier (UBA)
5/06/2014
3 / 19
Matplotlib
Matplotlib
En lugar de usar su propio lenguaje como MATLAB, los scripts para graficar se escriben enteramente en
Python. Tiene un m
odulo para graficaci
on llamado pylab, que se programa de una manera similar a
MATLAB (es una m
aquina de estados).
Para manejar datos hace uso extensivo de la biblioteca de
algebra lineal numpy.
Un ejemplo3 :
import matplotlib.pyplot as plt
import numpy as np
with plt.xkcd():
# Based on "Stove Ownership" from XKCD by Randall Monroe
# http://xkcd.com/418/
fig = plt.figure()
ax = fig.add_axes((0.1, 0.2, 0.8, 0.7))
ax.spines[right].set_color(none)
ax.spines[top].set_color(none)
plt.xticks([])
plt.yticks([])
ax.set_ylim([-30, 10])
data = np.ones(100)
data[70:] -= np.arange(30)
plt.annotate(THE DAY I REALIZED
I COULD COOK BACON\nWHENEVER I WANTED,
xy=(70, 1), arrowprops={arrowstyle:->},
xytext=(15, -10))
plt.plot(data)
plt.xlabel(TIME)
plt.ylabel(MY OVERALL HEALTH)
fig.text(0.5, 0.05,
"STOVE OWNERSHIP" FROM XKCD BY RANDALL MONROE, ha=center)
3
http://matplotlib.org/mpl_examples/showcase/xkcd.py
Maximiliano Geier (UBA)
5/06/2014
4 / 19
Matplotlib
Hello, world!
Vamos a escribir un plot muy sencillo de una funci
on en dos dimensiones.
1
Importamos el m
odulo de graficaci
on de matplotlib y
numpy:
import matplotlib.pyplot as plt
import numpy as np
#
x
#
#
y
3
como range
= np.arange(0, 2, 0.01)
aplico sin(2 t) a cada elemento
t del vector x
= np.sin(2*np.pi*x)
0.5
0.0
0.5
Graficamos y en funci
on de x:
1.0
0.0
plt.plot(x, y)
5
Hello, world!
1.0
voltaje (mV)
0.5
1.0
tiempo (s)
1.5
2.0
Tambi
en guardarla en un archivo:
plt.savefig(hello.pdf)
Maximiliano Geier (UBA)
5/06/2014
5 / 19
Matplotlib
Cargando datos
Im
agenes:
img = plt.imread(archivo.png)
Excel: lo m
as sencillo es exportar los datos de Excel a CSV (desde el mismo Excel).
Tambi
en se puede usar el paquete pandas4 para cargar planillas de Excel directamente.
http://stackoverflow.com/a/17053360
Maximiliano Geier (UBA)
5/06/2014
6 / 19
Matplotlib
En varios plots:
datos = np.loadtxt(datos.txt)
plt.plot(datos[:,0], datos[:,1])
plt.plot(datos[:,0], datos[:,2])
Un solo plot:
plt.plot(datos[:,0], datos[:,1:])
Nota de implementaci
on: elegir filas o columnas de un conjunto de datos de numpy se
hace por referencia. Esto quiere decir que si modificamos datos[:,0] el cambio tambien
se ve en datos. Si queremos una copia, hay que usar datos[:,0].copy().
Maximiliano Geier (UBA)
5/06/2014
7 / 19
Matplotlib
Cambiando el formato
5/06/2014
8 / 19
Matplotlib
5/06/2014
9 / 19
Matplotlib
Usando Matplotlib
Matplotlib se puede usar interactivamente desde la consola de Python o desde un
programa.
Desde la consola normal de Python:
mgeier@xpsmax:~$ python3
Python 3.4.0 (default, Apr 11 2014, 13:05:11)
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import matplotlib.pyplot as plt
>>> import numpy as np
Desde la consola de IPython:
mgeier@xpsmax:~$ ipython3 --pylab
Python 3.4.0 (default, Apr 11 2014, 13:05:11)
Type "copyright", "credits" or "license" for more information.
Using matplotlib backend: TkAgg
In [1]:
Maximiliano Geier (UBA)
5/06/2014
10 / 19
Matplotlib
35
30
25
Scores
Probability
0.020
Histogramas: plt.hist
0.015
0.010
20
15
10
5
0.005
0.000
40
Gr
aficos de barra: plt.bar
40
0.025
0
60
80
100 120
Smarts
140
160
Logs
Frogs
A
0.25
C
Group
0.20
15.0%
10.0%
0.15
i +1
0.10
Gr
aficos de torta: plt.pie
Hogs
30.0%
45.0%
Dogs
0.05
0.10
0.15
0.15 0.10 0.05 0.00 0.05 0.10 0.15 0.20 0.25
0.05
0.00
1.01
0.79
0.56
0.34
0.11
-0.11
-0.34
-0.56
-0.79
-1.01
6
4
0.8
0.6
0.4
0.2
0.0
0.2
0.4
0.6
0.8
2
6 4
0
2 0
2
4
2 4
6 6
5/06/2014
1.0
0.6
0.2
0.2
0.6
1.0
6
11 / 19
Gnuplot
Gnuplot
Uno de los primeros sistemas de
graficaci
on scripteables.
Desarrollado originalmente por Colin
Kelly y Thomas Williams en 1986.
Actualmente es el m
as usado de los
graficadores de este tipo, funciona en la
mayora de los sistemas operativos.
Varios programas lo utilizan como
motor de graficaci
on (por ejemplo
QtiPlot).
A diferencia de Matplotlib, usa su
propio lenguaje especializado en
graficar figuras.
Soporta salidas en distintos formatos
por medio de sus muchos terminal
drivers: qt, canvas, svg, pdf, png,
tikz, latex, windows, etc.
Maximiliano Geier (UBA)
5/06/2014
13 / 19
Gnuplot
Hello, world!
Vamos a ver c
omo se escribe el mismo plot de antes en gnuplot:
1
Hello, world!
1
sin(2*pi*x)
0.8
0.6
0.4
Graficamos:
0
-0.2
-0.4
plot sin(2*pi*x)
4
0.2
-0.6
-0.8
-1
0.5
1.5
tiempo (s)
Nota de implementaci
on: la salida a PDF no guarda el archivo hasta que no es
cerrado. Se puede forzar su cierre con set output sin ning
un nombre.
5/06/2014
14 / 19
Gnuplot
Volvamos al ejemplo del archivo de datos con 3 columnas. Si queremos repetir el mismo
plot en gnuplot, podemos cargar los datos directamente desde el comando plot:
plot datos.txt using 1:2 with lines title D&C, \
datos.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.
with lines: plotear un conjunto de puntos predeterminadamente nos marca solo
los puntos.
title <texto>: pone <texto> como label de ese conjunto de datos o funci
on.
Al igual que en Matplotlib, la funci
on plot tiene muchos modificadores para cambiar la
apariencia de los gr
aficos.
5/06/2014
15 / 19
Gnuplot
Usando gnuplot
5/06/2014
16 / 19
Otros graficadores
Software libre:
GNU Octave: alternativa libre al MATLAB, usa un formato de scripting bastante
compatible.
R: paquete estadstico, lenguaje propio orientado a objetos.
ROOT: paquete de an
alisis de datos desarrollado en CERN, se programa en C++
(tambien orientado a objetos).
Software propietario:
MATLAB: lenguaje propio (imperativo).
Origin: lenguaje propio (imperativo).
SAS: lenguaje propio.
SPSS: lenguaje propio, tambien se puede usar desde Python y VB.NET.
Maple: lenguaje propio (imperativo).
Lista completa: http://en.wikipedia.org/wiki/List_of_graphing_software
5/06/2014
18 / 19
Otros graficadores
Referencia adicional
5/06/2014
19 / 19