Создание сетки изображений с использованием Matplotlib

PythonPythonBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом руководстве показано, как создать сетку изображений с использованием ImageGrid из Matplotlib. Мы создадим сетку изображений размером 2x2 и рассмотрим способы добавления цветовых полос к сетке.

Советы по работе с ВМ

После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.

Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.

Импортируем необходимые библиотеки и данные

Сначала нам нужно импортировать необходимые библиотеки и данные для создания нашей сетки. Мы будем использовать matplotlib.pyplot для построения графиков, cbook для получения примера набора данных и ImageGrid для создания нашей сетки.

import matplotlib.pyplot as plt
from matplotlib import cbook
from mpl_toolkits.axes_grid1 import ImageGrid

## Получаем пример данных
Z = cbook.get_sample_data("axes_grid/bivariate_normal.npy")  ## 15x15 массив
extent = (-3, 4, -4, 3)

Создаем сетку 2x2 изображений с одной цветовой полосой

Наша первая сетка будет сеткой 2x2 изображений с одной цветовой полосой. Мы будем использовать функцию ImageGrid для создания сетки и указывать количество строк и столбцов, которое мы хотим. Также мы укажем расположение цветовой полосы и установим share_all в True, чтобы поделить цветовую полосу между всеми изображениями.

## Создаем сетку 2x2 изображений с одной цветовой полосой
grid = ImageGrid(
    fig,  ## Объект Figure
    141,  ## Место расположения подграфика
    nrows_ncols=(2, 2),  ## Количество строк и столбцов
    axes_pad=0.0,  ## Поля между осями
    label_mode="L",  ## Режим меток
    share_all=True,  ## Поделить цветовую полосу между всеми изображениями
    cbar_location="top",  ## Расположение цветовой полосы
    cbar_mode="single"  ## Режим цветовой полосы
)

## Строим изображения на сетке
for ax in grid:
    im = ax.imshow(Z, extent=extent)

## Добавляем цветовую полосу к сетке
grid.cbar_axes[0].colorbar(im)
for cax in grid.cbar_axes:
    cax.tick_params(labeltop=False)

Создаем сетку 2x2 изображений, где каждое изображение имеет свою цветовую полосу

Наша следующая сетка будет сеткой 2x2 изображений, где каждое изображение имеет свою цветовую полосу. Мы снова будем использовать функцию ImageGrid, но на этот раз мы установим cbar_mode в "each", чтобы указать, что каждое изображение должно иметь свою цветовую полосу.

## Создаем сетку 2x2 изображений, где каждое изображение имеет свою цветовую полосу
grid = ImageGrid(
    fig,  ## Объект Figure
    142,  ## Место расположения подграфика
    nrows_ncols=(2, 2),  ## Количество строк и столбцов
    axes_pad=0.1,  ## Поля между осями
    label_mode="1",  ## Режим меток
    share_all=True,  ## Поделить цветовую полосу между всеми изображениями
    cbar_location="top",  ## Расположение цветовой полосы
    cbar_mode="each",  ## Режим цветовой полосы
    cbar_size="7%",  ## Размер цветовой полосы
    cbar_pad="2%"  ## Поля между цветовой полосой и изображениями
)

## Строим изображения на сетке и добавляем цветовые полосы
for ax, cax in zip(grid, grid.cbar_axes):
    im = ax.imshow(Z, extent=extent)
    cax.colorbar(im)
    cax.tick_params(labeltop=False)

Создаем сетку 2x2 изображений, где каждое изображение имеет свою цветовую полосу и разный диапазон цветовой полосы

Наша последняя сетка также будет сеткой 2x2 изображений, где каждое изображение имеет свою цветовую полосу, но на этот раз мы будем использовать для каждого изображения другой диапазон цветовой полосы. Мы будем настраивать диапазон цветовой полосы с использованием vmin и vmax при построении каждого изображения.

## Создаем сетку 2x2 изображений, где каждое изображение имеет свою цветовую полосу и разный диапазон цветовой полосы
grid = ImageGrid(
    fig,  ## Объект Figure
    143,  ## Место расположения подграфика
    nrows_ncols=(2, 2),  ## Количество строк и столбцов
    axes_pad=(0.45, 0.15),  ## Поля между осями
    label_mode="1",  ## Режим меток
    share_all=True,  ## Поделить цветовую полосу между всеми изображениями
    cbar_location="right",  ## Расположение цветовой полосы
    cbar_mode="each",  ## Режим цветовой полосы
    cbar_size="7%",  ## Размер цветовой полосы
    cbar_pad="2%"  ## Поля между цветовой полосой и изображениями
)

## Строим изображения на сетке и добавляем цветовые полосы
limits = ((0, 1), (-2, 2), (-1.7, 1.4), (-1.5, 1))  ## Разные диапазоны цветовых полос
for ax, cax, vlim in zip(grid, grid.cbar_axes, limits):
    im = ax.imshow(Z, extent=extent, vmin=vlim[0], vmax=vlim[1])
    cb = cax.colorbar(im)
    cb.set_ticks((vlim[0], vlim[1]))

Резюме

В этом уроке мы узнали, как создавать сетку изображений с использованием ImageGrid из Matplotlib. Мы изучили разные способы добавления цветовых полос к сетке, включая использование одной цветовой полосы для всех изображений, присвоение каждой картинке собственной цветовой полосы и присвоение каждой картинке собственной цветовой полосы с разным диапазоном цветовой полосы.