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