Data Visualization

Effizientes Anzeigen mehrerer Bilder mit Matplotlib

Spread the love

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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert