Una pequeña intro a las subplots de Matplotlib
Guillermo
Posted on January 11, 2023
En este muy pequeño post nos centraremos en la tarea de crear varios gráficos en una sola imagen con la librería Matplotlib.
La manera más fácil de lograr nuestra tarea es usando matplotlib.pyplot.subplots. Este método retorna una tupla (fig, ax)
, donde fig
hace referencia a Figure
el cual es la imagen contenedora de todos los sub-gráficos, y ax
hace referencia a un arreglo de Axes
, estos se refieren a cada sub-gráfico de manera individual.
Al método anterior le podemos especificar el número de filas y columnas para generar tantos sub-gráficos como nosotros consideremos necesario. Para entender esto de mejor manera pasemos al código:
import matplotlib.pyplot as plt
plt.style.use('ggplot')
fig, ax = plt.subplots(figsize=(12,4) ,nrows=1, ncols=3)
Ahora veamos como graficar en los espacios generados, para esto crearemos unos datos con ayuda de numpy
.
import numpy as np
x = np.linspace(0, 2 * np.pi, 400)
y1 = np.cos(x**2)
y2 = np.sin(x**2)
y3 = np.floor(x**2)
Ahora sí grafiquemos estas tres funciones:
fig, ax = plt.subplots(figsize=(16,4) ,nrows=1, ncols=3)
ax[0].plot(x, y1, color='#581845', linestyle='dashed')
ax[0].set_title('Función coseno')
ax[1].plot(x, y2, color='#0C0C0E', linestyle='dashdot')
ax[1].set_title('Función seno')
ax[2].plot(x, y3, color='#D42D2D')
ax[2].set_title('Función piso')
plt.show()
Alternativamente podemos desempacar los Axes
como una tupla:
fig, (ax1, ax2, ax3) = plt.subplots(figsize=(16,4) ,nrows=1, ncols=3)
ax1.plot(x, y1, color='#581845', linestyle='dashed')
ax1.set_title('Función coseno')
ax2.plot(x, y2, color='#0C0C0E', linestyle='dashdot')
ax2.set_title('Función seno')
ax3.plot(x, y3, color='#D42D2D')
ax3.set_title('Función piso')
plt.show()
Y el resultado será el mismo. Aquí ya es una cuestión de gustos el cómo manejar a los Axes
.
Ahora generemos un arreglo bidimensional de sub-gráficos y veamos que podemos acceder a cada uno de ellos con índices, como si se tratara de una matriz.
Pero antes de graficar necesitamos crear una cuarta función para poder llenar el último espacio, así que creemos dicha función:
y4=np.exp(x)
Ahora si procedamos a hacer nuestras gráficas:
fig, ax = plt.subplots(figsize=(16,8) ,nrows=2, ncols=2)
ax[0, 0].plot(x, y1, color='#581845', linestyle='dashed')
ax[0, 0].set_title('Función coseno')
ax[0, 1].plot(x, y2, color='#0C0C0E', linestyle='dashdot')
ax[0, 1].set_title('Función seno')
ax[1, 0].plot(x, y3, color='#D42D2D')
ax[1, 0].set_title('Función piso')
ax[1, 1].plot(x, y4, color='#0B13BE')
ax[1, 1].set_title('Función exponencial')
plt.show()
Este ejemplo es muy sencillo y todas las funciones las generamos a partir del mismo dominio (eje X). Sin embargo, puede que también en un caso que estemos estudiando los datos compartan algún eje, por lo que resultaría útil que nuestra imagen no muestre el eje dos veces sino que simplemente se comparta. Lo anterior lo podemos lograr con sharex
o sharey
.
fig, ax = plt.subplots(figsize=(16,8) ,nrows=2, ncols=2, sharex=True)
ax[0, 0].plot(x, y1, color='#581845', linestyle='dashed')
ax[0, 0].set_title('Función coseno')
ax[0, 1].plot(x, y2, color='#0C0C0E', linestyle='dashdot')
ax[0, 1].set_title('Función seno')
ax[1, 0].plot(x, y3, color='#D42D2D')
ax[1, 0].set_title('Función piso')
ax[1, 1].plot(x, y4, color='#0B13BE')
ax[1, 1].set_title('Función exponencial')
plt.show()
Muchas más cosas se pueden personalizar con la finalidad de realizar la visualización que nosotros queramos, pero la idea era hacer este post muy conciso y corto, ya trataremos con mayor profundidad este y otros temas en próximas entradas.
Mil gracias por leer, excelente día :D
Posted on January 11, 2023
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.