Instalando matplotlib (y numpy) en Ubuntu
Para instalar matplotlib simplemente, desde la terminal de Linux, escribes
apt-get install python-matplotlib
Y se iniciará el proceso de instalación
(a menos que ya esté instalado). Si tienes problemas, accedes a al web
del proyecto matplotlib http://matplotlib.org/users/installing.html
Si necesitas instalar otros paquetes, como numpy, también:
apt-get install python-numpy
Trabajando con matplotlib
El módulo matplotlib es un módulo que trabajando junto a numpy
consigue representación gráfica de muy alto nivel. Una razón para
usarlo es que es un módulo propio del proyecto Python. Otra, que en
combinación con el ya mencionado numpy, y scipy, se convierte una alternativa a matlab.
Mi primer gráfico
# -*- coding: utf-8 -*- import matplotlib.pyplot as plt plt.plot([-1, -4.5, 16, 23]) plt.show()En la primera línea importamos el submódulo pyplot de matplotlib , usualmente con el alias plt. En la segunda se representan 4 valores (eje Y) y la orden final es mostrarlo en pantalla. Aunque no hemos escrito valores de eje X, se toman de uno en uno empezando por cero.
- Con esta modificación plt.plot([-1, -4.5, 16, 23], "ob") se obtienen los puntos discretos. Una lista con los colores y modificadores, se muestra a continuación:
= = =
Gráfico con valores en ejes X e Y
# -*- coding: utf-8 -*- import matplotlib.pyplot as plt import numpy as np # our X values: dias = np.linspace(1,30,30) # our Y values: celsius_values = np.random.rand(30)*15+15 print celsius_values print dias plt.plot(dias, celsius_values) plt.show()Utilizamos la generación de listas con numpy para crear los valores en X y en Y
- Se puede mejorar con las sentencias plt.xlabel('Días'), plt.ylabel('Grados centígrados') ; es necesaria la inclusión de la instancia from __future__ import unicode_literals (NOTA: repasar este punto porque entra en conflicto con la escritura en el terminal de caracteres en utf-8).
= = =
Dibujando más de una gráfica
-*- coding: utf-8 -*- import matplotlib.pyplot as plt import numpy as np # our X values: dias = np.linspace(1,30,30) # our Y values: celsius_values_min = np.random.rand(30)*15+15 celsius_values_max = np.random.rand(30)*10 celsius_values_max += celsius_values_min print celsius_values_min print celsius_values_max print dias plt.plot(dias, celsius_values_min,"b-",dias,celsius_values_max,'m-') plt.show()
- Escribo en plt.plot más de una referencia a una gráfica.
- Si amplío con estas dos líneas, defino los límites de la función:
- xmin, xmax, ymin, ymax = 1, 30, celsius_values_min.min()*0.95, celsius_values_max.max()*1.051
- plt.axis([xmin, xmax, ymin, ymax])
= = =
Otro ejemplo
No aporta nada nuevo pero es muy ilustrativo
# -*- coding: utf-8 -*- import matplotlib.pyplot as plt import numpy as np X = np.linspace(-2 * np.pi, 2 * np.pi, 50, endpoint=True) F1 = 3 * np.sin(X) F2 = np.sin(2*X) F3 = 0.3 * np.sin(X) startx, endx = -2 * np.pi - 0.1, 2*np.pi + 0.1 starty, endy = -3.1, 3.1 plt.axis([startx, endx, starty, endy]) plt.plot(X,F1) plt.plot(X,F2) plt.plot(X,F3) plt.plot(X, F1, 'ro') plt.plot(X, F2, 'bx') plt.show()
- Intenta cambiar el estilo de una de las funciones usando parámetros plt.plot(X, F1, color="blue", linewidth=2.5, linestyle="-")
= = =
Rellenando con color
# -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt n = 256 X = np.linspace(-np.pi,np.pi,n,endpoint=True) Y = np.sin(2*X) plt.plot (X, Y, color='blue', alpha=1.00) plt.fill_between(X, 0, Y, color='blue', alpha=0.5) plt.show()
Donde tenemos, para fill_between que:
- X, es el rango de los valores de X
- el siguiente, 0, es el valor de Y a partir del que se dibuja.
- el siguiente, Y, son los valores Y de la función hasta los que se dibuja.
- el resto son parámetros como color y alpha (transparencia, un número entre 0 y 1, tipo float).
- Intenta cambiar a... plt.fill_between(X, Y, 1, color='blue', alpha=0.1)
= = =
Merece la pena trabajar un poco más este módulo
Ejemplo de dos gráficas en la misma ventana
211 significa que se disponen en 2 filas y 1 columna, y 1 que ocupa la primera posición; 212 significa que se disponen en 2 filas y 1 columna, y 2 que ocupa la segunda posición.import numpy as np import matplotlib.pyplot as plt def f(t): return np.exp(-t) * np.cos(2*np.pi*t) t1 = np.arange(0.0, 5.0, 0.1) t2 = np.arange(0.0, 5.0, 0.02) plt.figure(1) plt.subplot(211) plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k') plt.subplot(212) plt.plot(t2, np.cos(2*np.pi*t2), 'r--') plt.show()Si después queremos más gráficas podemos poner plt.figure(2) en otra ventana. A lo que ya sabemos del apartado anterior, podemos añadir comandos como:
- plt.title('Título del gráfico'), que añade un título y complementa a xlabel e ylabel.
- plt.grid(True), que muestra una cuadrícula en la gráfica.
= = =
Insertando anotaciones en la gráfica
# -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt ax = plt.subplot(111) t = np.arange(0.0, 5.0, 0.01) s = np.cos(2*np.pi*t) line, = plt.plot(t, s, lw=2) plt.annotate('local max', xy=(2, 1), xytext=(3, 1.5), arrowprops=dict(facecolor='red', shrink=0.1), ) plt.ylim(-2,2) plt.show()
- Para saber más sobre el método plt.annotate.
= = =
Se puede cambiar las escalas lineales a logarítmicas con plt.xscale('log') (o yscale). Admite 'linear', 'log', 'symlog', 'logit'.
= = =
- Para conocer algunos estilos predefinidos, imprimir plt.style.available. Para usar uno de la lista, plt.style.us('ggplot'). Para saber más.
- Para trabajar con textos, y evitar el problema de los acentos y las ñ's.
- Tutorial para insertar imágenes en las gráficas.
Leyendas
import matplotlib.pyplot as plt from numpy.random import randn z = randn(10) red_dot, = plt.plot(z, "ro", markersize=15) # Put a white cross over some of the data. white_cross, = plt.plot(z[:5], "w*", markeredgewidth=1, markersize=10) plt.legend([red_dot, (red_dot, white_cross)], ["Attr A", "Attr A+B"]) plt.show()
= = =
Y para saber más, referenciarnos al manual de usuario: http://matplotlib.org/users/index.html
No hay comentarios:
Publicar un comentario