Cómo mejorar el tamaño o el espaciado de las subplots con muchas subplots en Matplotlib
-
tight_layout()
método -
plt.subplots_adjust()
método -
plt.subplot_tool()
método -
Activar la función
restricined_layout=True
en los subtramas
Podríamos usar los métodos tight_layout()
, subplots_adjust()
y subplot_tool()
para mejorar el tamaño o el espaciado de las subtramas con muchas subtramas en Matplotlib. También podemos mejorar el espaciado de las subtramas estableciendo constrained_layout=True
en la función subplots()
.
tight_layout()
método
El método tight_layout()
mantiene automáticamente el espacio correcto entre las subtramas.
import numpy as np
import matplotlib.pyplot as plt
x = [1, 2, 3]
y = [2, 4, 6]
a = np.linspace(0, 5, 100)
figure, axes = plt.subplots(nrows=2, ncols=2)
axes[0, 0].plot(x, y)
axes[0, 1].plot(a, np.sin(a))
axes[1, 0].plot(a, np.cos(a))
axes[1, 1].plot(range(10))
axes[0, 0].set_title("subplot 1")
axes[0, 1].set_title("subplot 2")
axes[1, 0].set_title("subplot 3")
axes[1, 1].set_title("subplot 4")
figure.tight_layout()
plt.show()
Si no usamos el método tight_layout()
, una fila se superpondrá con el título de la siguiente.
import numpy as np
import matplotlib.pyplot as plt
x = [1, 2, 3]
y = [2, 4, 6]
a = np.linspace(0, 5, 100)
figure, axes = plt.subplots(nrows=2, ncols=2)
axes[0, 0].plot(x, y)
axes[0, 1].plot(a, np.sin(a))
axes[1, 0].plot(a, np.cos(a))
axes[1, 1].plot(range(10))
axes[0, 0].set_title("subplot 1")
axes[0, 1].set_title("subplot 2")
axes[1, 0].set_title("subplot 3")
axes[1, 1].set_title("subplot 4")
plt.show()
plt.subplots_adjust()
método
Podemos usar el método plt.subplots_adjust()
para cambiar el espacio entre los subtramas.
import numpy as np
import matplotlib.pyplot as plt
x = [1, 2, 3]
y = [2, 4, 6]
a = np.linspace(0, 5, 100)
figure, axes = plt.subplots(nrows=2, ncols=2, figsize=(6, 4))
axes[0, 0].plot(x, y)
axes[0, 1].plot(a, np.sin(a))
axes[1, 0].plot(a, np.cos(a))
axes[1, 1].plot(range(10))
axes[0, 0].set_title("subplot 1")
axes[0, 1].set_title("subplot 2")
axes[1, 0].set_title("subplot 3")
axes[1, 1].set_title("subplot 4")
plt.subplots_adjust(left=0.125, bottom=0.1, right=0.9, top=0.9, wspace=0.2, hspace=0.35)
plt.show()
plt.subplots_adjust(left=0.125, bottom=0.1, right=0.9, top=0.9, wspace=0.2, hspace=0.35)
wspace
y hspace
especifican el espacio reservado entre la subtrama. Son las fracciones de ancho y alto del eje respectivamente.
Los parámetros left
, right
, top
e bottom
especifican las posiciones de los cuatro lados de las subplots. Son las fracciones de la anchura y la altura de la figura.
plt.subplot_tool()
método
Este método lanza una ventana de herramientas de subtrama para una figura.
import matplotlib.pyplot as plt
import numpy.random as rnd
fig = plt.figure()
plt.subplot(221)
plt.imshow(rnd.random((100, 100)))
plt.subplot(222)
plt.imshow(rnd.random((100, 100)))
plt.subplot(223)
plt.imshow(rnd.random((100, 100)))
plt.subplot(224)
plt.imshow(rnd.random((100, 100)))
plt.subplot_tool()
plt.show()
Proporciona un método interactivo para que el usuario arrastre la barra en la subplot_tool
para cambiar la disposición de las subtramas.
Activar la función restricined_layout=True
en los subtramas
constrained_layout
ajusta automáticamente las subtramas y decoraciones para que encajen en la figura, de la mejor manera posible.
constrained_layout
debe ser activado antes o durante la creación de la subplot ya que optimiza la disposición antes de cada paso del dibujo.
import numpy as np
import matplotlib.pyplot as plt
x = [1, 2, 3]
y = [2, 4, 6]
a = np.linspace(0, 5, 100)
figure, axes = plt.subplots(2, 2, constrained_layout=True)
axes[0, 0].plot(x, y)
axes[0, 1].plot(a, np.sin(a))
axes[1, 0].plot(a, np.cos(a))
axes[1, 1].plot(range(10))
axes[0, 0].set_title("subplot 1")
axes[0, 1].set_title("subplot 2")
axes[1, 0].set_title("subplot 3")
axes[1, 1].set_title("subplot 4")
plt.savefig(
"Improve subplot spacing with many subplots activating constrained_layout.png"
)
plt.show()
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn