Matplotlib ist eine leistungsstarke Python-Bibliothek zum Erstellen von Visualisierungen. Eine häufige Aufgabe ist die Anzeige mehrerer Bilder in einer einzigen Abbildung zum Vergleich oder zur Veranschaulichung verschiedener Aspekte derselben Daten. Dieser Artikel präsentiert zwei effiziente Methoden hierfür: die iterative Verwendung von add_subplot()
und die Erstellung einer wiederverwendbaren Funktion.
Inhaltsverzeichnis
Iterative Subplot-Erstellung mit add_subplot()
Dieser Ansatz ist ideal, wenn die Anzahl der Bilder dynamisch ist. add_subplot(nrows, ncols, index)
erstellt Subplots innerhalb einer Abbildung und gibt die Anzahl der Zeilen, Spalten und den Index des aktuellen Subplots an.
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import os
image_dir = "pfad/zu/ihren/bildern" # Ersetzen Sie dies durch Ihr Bildverzeichnis
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("Keine Bilder im angegebenen Verzeichnis gefunden.")
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')
#Entfernen aller zusätzlichen Subplots
for j in range(i + 1, len(axes)):
fig.delaxes(axes[j])
plt.tight_layout()
plt.show()
Dieser Code iteriert durch die Bilder, liest sie mit mpimg.imread()
und zeigt sie in Subplots an. plt.tight_layout()
verhindert Überlappungen. Denken Sie daran, `“pfad/zu/ihren/bildern“` durch Ihr Verzeichnis zu ersetzen. Der Code passt Zeilen und Spalten dynamisch für ein optimales Layout an und entfernt leere Subplots.
Wiederverwendbare Funktion zur Bildanzeige
Für eine bessere Codeorganisation und Wiederverwendbarkeit kapseln Sie die Logik der Bildanzeige in einer Funktion:
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
def display_images(image_paths, titles=None, cols=3, figsize=(15, 10)):
"""Zeigt mehrere Bilder in einer einzigen Abbildung an.
Args:
image_paths: Eine Liste von Bildpfaden.
titles: (Optional) Eine Liste von Titeln.
cols: Anzahl der Spalten im Subplot-Raster.
figsize: Abbildungsgröße.
"""
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')
#Entfernen aller zusätzlichen Subplots
for j in range(i + 1, len(axes)):
fig.delaxes(axes[j])
plt.tight_layout()
plt.show()
# Beispielverwendung:
image_paths = ["pfad/zu/bild1.jpg", "pfad/zu/bild2.png", "pfad/zu/bild3.jpeg"] # Ersetzen Sie dies durch Ihre Bildpfade
titles = ["Bild 1", "Bild 2", "Bild 3"]
display_images(image_paths, titles)
Diese Funktion akzeptiert Bildpfade und optionale Titel, berechnet dynamisch das Subplot-Raster und zeigt die Bilder an. Sie ist flexibler und wiederverwendbarer als der iterative Ansatz. Denken Sie daran, Matplotlib zu installieren: pip install matplotlib
.