Matplotlib предоставляет мощные инструменты для визуализации данных, включая отображение изображений. Часто возникает необходимость представить два или более изображения рядом друг с другом для сравнения, анализа или просто для улучшения визуального представления информации. В этой статье мы рассмотрим различные методы отображения двух изображений рядом в Matplotlib, начиная с простых и заканчивая более продвинутыми.
Зачем отображать изображения рядом?
Отображение изображений рядом позволяет:
- Непосредственно сравнивать визуальные характеристики разных изображений.
- Показывать взаимосвязь между изображениями, представляющими разные аспекты одних и тех же данных.
- Создавать более информативные и привлекательные визуализации.
- Экономить место на странице или экране, представляя несколько изображений компактно.
Необходимые инструменты и библиотеки
Для работы с изображениями в Matplotlib нам понадобятся следующие библиотеки:
matplotlib.pyplot
для создания графиков и отображения изображений.numpy
для работы с массивами, представляющими изображения.matplotlib.image
для загрузки изображений (илиPIL
(Pillow), илиopencv
).
Использование subplot()
для отображения двух изображений рядом
Основы функции subplot()
Функция subplot()
позволяет создавать сетку подграфиков внутри одной фигуры. Она принимает три аргумента: количество строк, количество столбцов и индекс активного подграфика.
Пример: Отображение двух изображений горизонтально
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
from typing import Tuple
def display_images_horizontally(image_path1: str, image_path2: str) -> None:
"""Displays two images horizontally side by side.
Args:
image_path1: Path to the first image.
image_path2: Path to the second image.
"""
# Загрузка изображений
try:
img1 = mpimg.imread(image_path1)
img2 = mpimg.imread(image_path2)
except FileNotFoundError as e:
print(f"Error loading image: {e}")
return
# Создание фигуры и подграфиков
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1) # 1 строка, 2 столбца, первый подграфик
plt.imshow(img1)
plt.title('Image 1')
plt.axis('off') # Отключение осей координат
plt.subplot(1, 2, 2) # 1 строка, 2 столбца, второй подграфик
plt.imshow(img2)
plt.title('Image 2')
plt.axis('off')
plt.tight_layout() # Предотвращение перекрытия элементов
plt.show()
# Пример использования (замените на ваши пути к изображениям)
#display_images_horizontally('image1.png', 'image2.png')
Пример: Отображение двух изображений вертикально
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
def display_images_vertically(image_path1: str, image_path2: str) -> None:
"""Displays two images vertically, one above the other.
Args:
image_path1: Path to the first image.
image_path2: Path to the second image.
"""
# Загрузка изображений
try:
img1 = mpimg.imread(image_path1)
img2 = mpimg.imread(image_path2)
except FileNotFoundError as e:
print(f"Error loading image: {e}")
return
# Создание фигуры и подграфиков
plt.figure(figsize=(5, 10))
plt.subplot(2, 1, 1) # 2 строки, 1 столбец, первый подграфик
plt.imshow(img1)
plt.title('Image 1')
plt.axis('off')
plt.subplot(2, 1, 2) # 2 строки, 1 столбец, второй подграфик
plt.imshow(img2)
plt.title('Image 2')
plt.axis('off')
plt.tight_layout()
plt.show()
# Пример использования (замените на ваши пути к изображениям)
#display_images_vertically('image1.png', 'image2.png')
Настройка размеров и расположения изображений
Размер фигуры можно настроить с помощью аргумента figsize
в функции plt.figure()
. plt.tight_layout()
автоматически корректирует расположение подграфиков, чтобы избежать перекрытия.
Использование subplots()
для гибкой компоновки изображений
Основы функции subplots()
Функция subplots()
является более удобным способом создания фигуры и набора подграфиков. Она возвращает кортеж, содержащий объект фигуры и массив объектов осей (Axes).
Создание фигуры и осей с помощью subplots()
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
from typing import List, Tuple
def display_images_subplots(image_path1: str, image_path2: str) -> None:
"""Displays two images using subplots.
Args:
image_path1: Path to the first image.
image_path2: Path to the second image.
"""
try:
img1 = mpimg.imread(image_path1)
img2 = mpimg.imread(image_path2)
except FileNotFoundError as e:
print(f"Error loading image: {e}")
return
# Создание фигуры и осей
fig, axes = plt.subplots(1, 2, figsize=(10, 5)) # 1 строка, 2 столбца
# Отображение изображений на созданных осях
axes[0].imshow(img1)
axes[0].set_title('Image 1')
axes[0].axis('off')
axes[1].imshow(img2)
axes[1].set_title('Image 2')
axes[1].axis('off')
plt.tight_layout()
plt.show()
# Пример использования (замените на ваши пути к изображениям)
#display_images_subplots('image1.png', 'image2.png')
Отображение изображений на созданных осях
После создания осей, изображения отображаются с помощью метода imshow()
для каждого объекта оси. Заголовки устанавливаются с помощью set_title()
, а оси координат отключаются с помощью axis('off')
.
Настройка заголовков и меток осей
Как уже показано в примерах, для настройки заголовков используется метод set_title()
. Аналогично, можно настроить метки осей, пределы и другие параметры отображения для каждого подграфика индивидуально.
Альтернативные методы компоновки изображений
Использование GridSpec
для сложной компоновки
GridSpec
позволяет создавать более сложные компоновки подграфиков, занимающих несколько строк и столбцов.
Создание пользовательской компоновки с помощью axes()
Функция axes()
позволяет создавать оси в произвольном месте на фигуре, указывая их координаты и размеры в долях от размера фигуры. Это дает максимальную гибкость в компоновке изображений.
Дополнительные советы и рекомендации
Обработка различных размеров изображений
Если изображения имеют разные размеры, можно использовать различные стратегии:
- Изменить размер изображений перед отображением (например, с помощью
PIL
илиopencv
). - Установить одинаковые пределы осей для всех подграфиков.
- Использовать
plt.tight_layout()
для автоматической корректировки расположения.
Улучшение визуализации с помощью цветовых карт и интерполяции
Для улучшения визуализации изображений можно использовать различные цветовые карты (colormap) и методы интерполяции при отображении с помощью imshow()
.
Сохранение изображений с корректным соотношением сторон
При сохранении изображений важно убедиться, что сохраняется правильное соотношение сторон. Это можно сделать с помощью аргумента aspect='equal'
в функции imshow()
или при сохранении фигуры.