Data Visualization

Эффективное отображение нескольких изображений в Matplotlib

Spread the love

Matplotlib — это мощная библиотека Python для создания визуализаций. Распространенная задача — отображение нескольких изображений на одном рисунке для сравнения или иллюстрации различных аспектов одних и тех же данных. В этой статье представлены два эффективных метода для достижения этого: итеративное использование add_subplot() и создание многоразовой функции.

Оглавление

Итеративное создание подграфиков с помощью add_subplot()

Этот подход идеально подходит, когда количество изображений динамическое. add_subplot(nrows, ncols, index) создает подграфики на рисунке, указывая количество строк, столбцов и индекс текущего подграфика.

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

image_dir = "path/to/your/images"  # Замените на вашу директорию с изображениями

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("В указанной директории не найдено изображений.")
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')

    #Удаление лишних подграфиков
    for j in range(i + 1, len(axes)):
        fig.delaxes(axes[j])


    plt.tight_layout()
    plt.show()

Этот код итерирует по изображениям, считывает их с помощью mpimg.imread() и отображает их в подграфиках. plt.tight_layout() предотвращает наложение. Не забудьте заменить `»path/to/your/images»` на вашу директорию. Код динамически корректирует количество строк и столбцов для оптимальной компоновки и удаляет пустые подграфики.

Многоразовая функция для отображения изображений

Для лучшей организации кода и многократного использования, инкапсулируйте логику отображения изображений в функцию:

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

def display_images(image_paths, titles=None, cols=3, figsize=(15, 10)):
    """Отображает несколько изображений на одном рисунке.

    Args:
        image_paths: Список путей к изображениям.
        titles: (Необязательно) Список заголовков.
        cols: Количество столбцов в сетке подграфиков.
        figsize: Размер рисунка.
    """
    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')

    #Удаление лишних подграфиков
    for j in range(i + 1, len(axes)):
        fig.delaxes(axes[j])

    plt.tight_layout()
    plt.show()

# Пример использования:
image_paths = ["path/to/image1.jpg", "path/to/image2.png", "path/to/image3.jpeg"]  # Замените на ваши пути к изображениям
titles = ["Изображение 1", "Изображение 2", "Изображение 3"]
display_images(image_paths, titles)

Эта функция принимает пути к изображениям и необязательные заголовки, динамически вычисляет сетку подграфиков и отображает изображения. Она более гибкая и многоразовая, чем итеративный подход. Не забудьте установить Matplotlib: pip install matplotlib.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *