Cómo mejorar el tamaño o el espaciado de las subplots con muchas subplots en Matplotlib

  1. tight_layout() método
  2. plt.subplots_adjust() método
  3. plt.subplot_tool() método
  4. 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()

Mejorar el tamaño de las subplots con muchas subplots usando tight_layout

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()

subplots sin usar tight_layout

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()

Mejorar el espaciado de las subtramas con muchas subtramas usando plt.subplots_adjust

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()

Mejora el espacio de las subplots con muchas subplots usando plt.subplots_adjust

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()

Mejore el espacio de las subplots con muchas subplots activando `constrained_layout`

Artículo relacionado - Matplotlib Subplot

  • Cómo añadir título a las subtramas en Matplotlib