Como exibir várias imagens em uma figura Corretamente em Matplotlib
-
Utilize Matplotlib
add_subplot()
emfor
Loop - Definir uma função com base nos subquadros em Matplotlib
A idéia central para exibir múltiplas imagens em uma figura é iterar sobre a lista de eixos para traçar imagens individuais. Utilizamos o método imshow()
para exibir imagens individuais.
Utilize Matplotlib add_subplot()
em for
Loop
A abordagem mais simples para exibir múltiplas imagens em uma figura pode ser exibir cada imagem utilizando add_subplot()
para iniciar o subplot e imshow()
método para exibir uma imagem dentro de um loop for
.
Sintaxe para o método add_subplot()
:
add_subplot(rows, columns, i)
onde rows
e columns
representam o número total de linhas e colunas em figura composta e i
representa o índice da imagem a ser exibida.
import numpy as np
import matplotlib.pyplot as plt
width = 5
height = 5
rows = 2
cols = 2
axes = []
fig = plt.figure()
for a in range(rows * cols):
b = np.random.randint(7, size=(height, width))
axes.append(fig.add_subplot(rows, cols, a + 1))
subplot_title = "Subplot" + str(a)
axes[-1].set_title(subplot_title)
plt.imshow(b)
fig.tight_layout()
plt.show()
Resultado:
Podemos acrescentar mais flexibilidade no código acima para traçar mais características em eixos selecionados e fornecer acesso a cada eixo de subquadros.
import numpy as np
import matplotlib.pyplot as plt
width = 5
height = 5
rows = 2
cols = 2
fig = plt.figure()
x = np.linspace(-3, 3, 100)
y1 = np.sin(x)
y2 = 1 / (1 + np.exp(-x))
axes = []
for i in range(cols * rows):
b = np.random.randint(10, size=(height, width))
axes.append(fig.add_subplot(rows, cols, i + 1))
subplot_title = "Subplot" + str(i)
axes[-1].set_title(subplot_title)
plt.imshow(b)
axes[1].plot(x, y1)
axes[3].plot(x, y2)
fig.tight_layout()
plt.show()
Resultado:
Aqui, os axes
permitem o acesso para manipular cada uma das subquadrantes.
Alternativamente, também podemos fornecer acesso a cada um dos subquadros com [row_index][column_index]
, o que é mais útil quando temos uma série de imagens múltiplas.
import numpy as np
import matplotlib.pyplot as plt
width = 5
height = 5
rows = 2
cols = 2
x = np.linspace(0, 3, 100)
y1 = np.sin(x)
y2 = 1 / (1 + np.exp(-x))
figure, axes = plt.subplots(nrows=rows, ncols=cols)
for a, b in enumerate(axes.flat):
image = np.random.randint(7, size=(height, width))
b.imshow(image, alpha=0.25)
r = a // cols
c = a % cols
subtitle = "Row:" + str(r) + ", Col:" + str(c)
b.set_title(subtitle)
axes[0][1].plot(x, y1)
axes[1][1].plot(x, y2)
figure.tight_layout()
plt.show()
Resultado:
Definir uma função com base nos subquadros em Matplotlib
Podemos definir uma função baseada no comando subplots que cria um número de eixos nas figuras, de acordo com o número de linhas e colunas, e em seguida iteratiza sobre a lista dos eixos para traçar imagens adicionando um título para cada uma delas.
import numpy as np
import matplotlib.pyplot as plt
def display_multiple_img(images, rows=1, cols=1):
figure, ax = plt.subplots(nrows=rows, ncols=cols)
for ind, title in enumerate(images):
ax.ravel()[ind].imshow(images[title])
ax.ravel()[ind].set_title(title)
ax.ravel()[ind].set_axis_off()
plt.tight_layout()
plt.show()
total_images = 4
images = {"Image" + str(i): np.random.rand(100, 100) for i in range(total_images)}
display_multiple_img(images, 2, 2)
Resultado:
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn