Matplotlib é uma poderosa biblioteca Python para criação de visualizações. Uma tarefa comum é exibir múltiplas imagens em uma única figura para comparação ou para ilustrar diferentes aspectos dos mesmos dados. Este artigo apresenta dois métodos eficientes para alcançar isso: usando add_subplot()
iterativamente e criando uma função reutilizável.
Sumário
Criação Iterativa de Subplots com add_subplot()
Esta abordagem é ideal quando o número de imagens é dinâmico. add_subplot(nrows, ncols, index)
cria subplots dentro de uma figura, especificando o número de linhas, colunas e o índice do subplot atual.
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import os
image_dir = "path/to/your/images" # Substitua pelo seu diretório de imagens
image_files = [f for f in os.listdir(image_dir) if os.path.isfile(os.path.join(image_dir, f))]
if not image_files:
print("Nenhuma imagem encontrada no diretório especificado.")
else:
num_images = len(image_files)
nrows = int(num_images**0.5)
ncols = (num_images + nrows - 1) // nrows
fig, axes = plt.subplots(nrows, ncols, figsize=(15, 10))
axes = axes.ravel()
for i, image_file in enumerate(image_files):
image_path = os.path.join(image_dir, image_file)
img = mpimg.imread(image_path)
axes[i].imshow(img)
axes[i].set_title(image_file)
axes[i].axis('off')
#Remove quaisquer subplots extras
for j in range(i + 1, len(axes)):
fig.delaxes(axes[j])
plt.tight_layout()
plt.show()
Este código itera pelas imagens, lê-as usando mpimg.imread()
e exibe-as em subplots. plt.tight_layout()
previne sobreposição. Lembre-se de substituir `”path/to/your/images”` pelo seu diretório. O código ajusta dinamicamente linhas e colunas para um layout ótimo e remove subplots vazios.
Função Reutilizável para Exibição de Imagens
Para melhor organização do código e reusabilidade, encapsule a lógica de exibição de imagens dentro de uma função:
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
def display_images(image_paths, titles=None, cols=3, figsize=(15, 10)):
"""Exibe múltiplas imagens em uma única figura.
Args:
image_paths: Uma lista de caminhos para as imagens.
titles: (Opcional) Uma lista de títulos.
cols: Número de colunas na grade do subplot.
figsize: Tamanho da figura.
"""
num_images = len(image_paths)
rows = (num_images + cols - 1) // cols
fig, axes = plt.subplots(rows, cols, figsize=figsize)
axes = axes.ravel()
for i, image_path in enumerate(image_paths):
img = mpimg.imread(image_path)
axes[i].imshow(img)
if titles:
axes[i].set_title(titles[i])
axes[i].axis('off')
#Remove quaisquer subplots extras
for j in range(i + 1, len(axes)):
fig.delaxes(axes[j])
plt.tight_layout()
plt.show()
# Exemplo de uso:
image_paths = ["path/to/image1.jpg", "path/to/image2.png", "path/to/image3.jpeg"] # Substitua pelos seus caminhos de imagem
titles = ["Imagem 1", "Imagem 2", "Imagem 3"]
display_images(image_paths, titles)
Esta função aceita caminhos de imagens e títulos opcionais, calcula dinamicamente a grade do subplot e exibe as imagens. É mais flexível e reutilizável do que a abordagem iterativa. Lembre-se de instalar o Matplotlib: pip install matplotlib
.