Data Visualization

Visualización eficiente de múltiples imágenes en Matplotlib

Spread the love

Matplotlib es una potente biblioteca de Python para crear visualizaciones. Una tarea común es mostrar varias imágenes en una sola figura para compararlas o para ilustrar diferentes aspectos de los mismos datos. Este artículo presenta dos métodos eficientes para lograr esto: usar add_subplot() iterativamente y crear una función reutilizable.

Tabla de Contenido

Creación de Subplots Iterativa con add_subplot()

Este enfoque es ideal cuando el número de imágenes es dinámico. add_subplot(nrows, ncols, index) crea subplots dentro de una figura, especificando el número de filas, columnas y el índice del subplot actual.

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import os

image_dir = "path/to/your/images"  # Reemplace con el directorio de sus imágenes

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("No se encontraron imágenes en el directorio 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')

    #Eliminar subplots adicionales
    for j in range(i + 1, len(axes)):
        fig.delaxes(axes[j])


    plt.tight_layout()
    plt.show()

Este código itera a través de las imágenes, las lee usando mpimg.imread() y las muestra en subplots. plt.tight_layout() previene la superposición. Recuerde reemplazar `»path/to/your/images»` con su directorio. El código ajusta dinámicamente las filas y columnas para un diseño óptimo y elimina los subplots vacíos.

Función Reutilizable para la Visualización de Imágenes

Para una mejor organización del código y reutilización, encapsule la lógica de visualización de imágenes dentro de una función:

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

def display_images(image_paths, titles=None, cols=3, figsize=(15, 10)):
    """Muestra múltiples imágenes en una sola figura.

    Args:
        image_paths: Una lista de rutas de imágenes.
        titles: (Opcional) Una lista de títulos.
        cols: Número de columnas en la cuadrícula de subplots.
        figsize: Tamaño de la 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')

    #Eliminar subplots adicionales
    for j in range(i + 1, len(axes)):
        fig.delaxes(axes[j])

    plt.tight_layout()
    plt.show()

# Ejemplo de uso:
image_paths = ["path/to/image1.jpg", "path/to/image2.png", "path/to/image3.jpeg"]  # Reemplace con sus rutas de imágenes
titles = ["Imagen 1", "Imagen 2", "Imagen 3"]
display_images(image_paths, titles)

Esta función acepta rutas de imágenes y títulos opcionales, calcula dinámicamente la cuadrícula de subplots y muestra las imágenes. Es más flexible y reutilizable que el enfoque iterativo. Recuerde instalar Matplotlib: pip install matplotlib.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *