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()
- Función Reutilizable para la Visualización de Imágenes
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
.