Data Visualization

Exibindo Múltiplas Imagens Eficientemente no Matplotlib

Spread the love

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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *