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=Trueen 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