Mostrando entradas con la etiqueta 47python. Mostrar todas las entradas
Mostrando entradas con la etiqueta 47python. Mostrar todas las entradas

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