Matplotlib es una librería que permite la creación de figuras y gráficos de calidad mediante el uso de Python.
import matplotlib
import matplotlib.pyplot as plt
# Muestrar los gráficos integrados dentro de jupyter notebook
%matplotlib inline
Si a la función de trazado se le da una matriz de datos, la usará como coordenadas en el eje vertical, y utilizará el índice de cada punto de datos en el array como la coordenada horizontal.
plt.plot([1, 2, 5, 7, 8, 3, 1])
plt.show()
También se puede proporcionar dos matrices: una para el eje horizontal, y otra para el eje vertical.
plt.plot([-3, -1, 0, 4, 7], [1, 4, 6, 7, 8])
plt.show()
Pueden modificarse las logitudes de los ejes para que la figura no se vea tan ajustada
plt.plot([-3, -1, 0, 4, 7], [1, 4, 6, 7, 8])
plt.axis([-4, 8, 0, 10]) # [xmin, xmax, ymin, ymax]
plt.show()
Se sigue el mismo procedimiento para pintar una función matemática
import numpy as np
x = np.linspace(-2, 2, 500)
y = x**2
plt.plot(x, y)
plt.show()
También pude modificarse el estilo de la gráfica para que contenga más información.
plt.plot(x, y)
plt.title("Square function")
plt.xlabel("x")
plt.ylabel("y = x**2")
plt.grid(True)
plt.show()
Pueden superponerse gráficas y cambiar el estilo de las líneas
import numpy as np
x = np.linspace(-2, 2, 500)
y = x**2
y2 = x + 1
plt.plot(x, y, 'b--', x, y2, 'g')
plt.show()
# Separando en diferentes lineas las funciones
import numpy as np
x = np.linspace(-2, 2, 500)
y = x**2
y2 = x + 1
plt.plot(x, y, 'b--')
plt.plot(x, y2, 'g')
plt.show()
Para poder diferenciar entre ambas funciones siempre es recomendable añadir una leyenda
import numpy as np
x = np.linspace(-2, 2, 500)
y = x**2
y2 = x + 1
plt.plot(x, y, 'b--', label="x**2")
plt.plot(x, y2, 'g', label="x+1")
plt.legend(loc="best") # La situa en la mejor localización
plt.show()
Tambien puede crearse dos graficas que no se superpongan. Estas graficas se organizan en un grid y se denominan subplots.
import numpy as np
x = np.linspace(-2, 2, 500)
y = x**2
y2 = x + 1
plt.subplot(1, 2, 1) # 1 rows, 1 columns, 1st subplot
plt.plot(x, y, 'b--')
plt.subplot(1, 2, 2) # 1 rows, 2 columns, 2nd subplot
plt.plot(x, y2, 'g')
plt.show()
Para que las gráficas no queden tan ajustadas, podemos hacer la figura más grande.
plt.figure(figsize=(14,6))
plt.subplot(1, 2, 1) # 1 rows, 1 columns, 1st subplot
plt.plot(x, y, 'b--')
plt.xlabel("x1", fontsize=14)
plt.ylabel("y1", fontsize=14)
plt.subplot(1, 2, 2) # 1 rows, 2 columns, 2nd subplot
plt.plot(x, y2, 'g')
plt.xlabel("x2", fontsize=14)
plt.ylabel("y2", fontsize=14)
plt.show()
from numpy.random import rand
x, y = rand(2, 100)
plt.scatter(x, y)
plt.show()
from numpy.random import rand
x, y = rand(2, 100)
x2, y2 = rand(2, 100)
plt.scatter(x, y, c='red')
plt.scatter(x2, y2, c='blue')
plt.show()
data = [1, 1.1, 1.8, 2, 2.1, 3.2, 3, 3, 3, 3]
plt.subplot(211) # 2 rows, 1 columns, 1st subplot
plt.hist(data, bins = 10, rwidth=0.8)
plt.xlabel("Value")
plt.ylabel("Frequency")
plt.subplot(212) # 2 rows, 1 columns, 2nd subplot
plt.hist(data, bins = [1, 1.5, 2, 2.5, 3], rwidth=0.95)
plt.xlabel("Value")
plt.ylabel("Frequency")
plt.show()
import numpy as np
x = np.linspace(-2, 2, 500)
y = x**2
y2 = x + 1
plt.plot(x, y, 'b--', label="x**2")
plt.plot(x, y2, 'g', label="x+1")
plt.legend(loc="best")
plt.savefig("mi_grafica.png", transparent=True)