19 de mayo de 2016

47. Instalando módulo MATPLOTLIB en Ubuntu. Trabajando con él.

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:
tipos de líneas  colores
= = =
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()
 = = =
Se puede cambiar las escalas lineales a logarítmicas con plt.xscale('log') (o yscale). Admite 'linear', 'log', 'symlog', 'logit'.
= = =
  1. Para conocer algunos estilos predefinidos, imprimir plt.style.available. Para usar uno de la lista, plt.style.us('ggplot'). Para saber más.
  2. Para trabajar con textos, y evitar el problema de los acentos y las ñ's.
  3. 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()
  1. Tutorial para insertar leyendas en los gráficos
  2. Tutorial para anotaciones
= = =
Y para saber más, referenciarnos al manual de usuario: http://matplotlib.org/users/index.html
 
 

No hay comentarios:

Publicar un comentario