Como melhorar o tamanho ou espaçamento de subpotes com muitos subpotes em Matplotlib

Suraj Joshi 30 janeiro 2023
  1. Método para alterar o tamanho e espaçamento de subpiso Matplotlib
  2. plt.subplots_adjust() Método
  3. plt.subplot_tool() Método
  4. Ativar constrained_layout=True em função de subquadros
Como melhorar o tamanho ou espaçamento de subpotes com muitos subpotes em Matplotlib

Poderíamos utilizar métodos tight_layout(), subplots_adjust() e subplot_tool() para melhorar o tamanho do subplot ou espaçamento com muitos subquadrantes em Matplotlib. Também podemos melhorar o espaçamento entre subparcelas definindo constrained_layout=True in subplots() function.

Método para alterar o tamanho e espaçamento de subpiso Matplotlib

O método tight_layout() mantém automaticamente o espaçamento correto entre subquadrantes.

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-3, 3, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = 1 / (1 + np.exp(-x))
y4 = np.exp(x)

fig, ax = plt.subplots(2, 2)

ax[0, 0].plot(x, y1)
ax[0, 1].plot(x, y2)
ax[1, 0].plot(x, y3)
ax[1, 1].plot(x, y4)

ax[0, 0].set_title("Sine function")
ax[0, 1].set_title("Cosine function")
ax[1, 0].set_title("Sigmoid function")
ax[1, 1].set_title("Exponential function")

fig.tight_layout()
plt.show()

Melhora o tamanho do subplot com muitos subplots utilizando o tight_layout

Se não utilizarmos o método tight_layout(), uma linha irá se sobrepor ao título da próxima.

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-3, 3, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = 1 / (1 + np.exp(-x))
y4 = np.exp(x)

fig, ax = plt.subplots(2, 2)

ax[0, 0].plot(x, y1)
ax[0, 1].plot(x, y2)
ax[1, 0].plot(x, y3)
ax[1, 1].plot(x, y4)

ax[0, 0].set_title("Sine function")
ax[0, 1].set_title("Cosine function")
ax[1, 0].set_title("Sigmoid function")
ax[1, 1].set_title("Exponential function")

plt.show()

subplots sem utilizar o tight_layout

plt.subplots_adjust() Método

Podemos utilizar o método plt.subplots_adjust() para alterar o espaçamento entre os subplots.

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-3, 3, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = 1 / (1 + np.exp(-x))
y4 = np.exp(x)

fig, ax = plt.subplots(2, 2)

ax[0, 0].plot(x, y1)
ax[0, 1].plot(x, y2)
ax[1, 0].plot(x, y3)
ax[1, 1].plot(x, y4)

ax[0, 0].set_title("Sine function")
ax[0, 1].set_title("Cosine function")
ax[1, 0].set_title("Sigmoid function")
ax[1, 1].set_title("Exponential function")

plt.subplots_adjust(left=0.125, bottom=0.1, right=0.9, top=0.9, wspace=0.2, hspace=0.35)

plt.show()

Melhorar o espaçamento entre subquadros com muitos subquadros utilizando plt.subplots_adjust

plt.subplots_adjust(left=0.125, bottom=0.1, right=0.9, top=0.9, wspace=0.2, hspace=0.35)

O wspace e o hspace especificam o espaço reservado entre os subplot. São as frações de largura e altura do eixo, respectivamente.

Os parâmetros left, right, top e bottom especificam as posições de quatro lados dos subplotamentos. Elas são as frações da largura e da altura da figura.

plt.subplot_tool() Método

Este método lança uma janela de ferramentas de subplot para uma figura.

import numpy as np
import matplotlib.pyplot as plt

im1 = np.random.random((50, 50))
im2 = np.random.random((40, 50))
im3 = np.random.random((50, 40))
im4 = np.random.random((60, 50))

plt.subplot(221)
plt.imshow(im1)
plt.subplot(222)
plt.imshow(im2)
plt.subplot(223)
plt.imshow(im3)
plt.subplot(224)
plt.imshow(im4)

plt.subplot_tool()
plt.show()

Melhorar o espaçamento dos subplot com muitos subplots usando plt.subplots_adjust

Ele fornece um método interativo para o usuário arrastar a barra no subplot_tool para alterar o layout das subquadrantes.

Ativar constrained_layout=True em função de subquadros

constrained_layout ajusta subquadrantes e decorações automaticamente para encaixá-los na figura, da melhor forma possível.

O constrained_layout deve ser ativado antes ou durante a criação do subplot, pois otimiza o layout antes de cada etapa do desenho.

import numpy as np
import matplotlib.pyplot as plt

a = np.linspace(0, 5, 100)

figure, axes = plt.subplots(2, 2, constrained_layout=True)

axes[0, 0].plot(x, np.exp(a))
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()

Melhorar o espaçamento dos subplots com muitos subplots ativando o constrained_layout

Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

Artigo relacionado - Matplotlib Subplot