Создание BboxImage в Matplotlib

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

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

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

Введение

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

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

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

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

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

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

Начнем с импорта необходимых библиотек для этого руководства. Нам понадобятся matplotlib.pyplot, numpy, BboxImage, Bbox и TransformedBbox.

import matplotlib.pyplot as plt
import numpy as np

from matplotlib.image import BboxImage
from matplotlib.transforms import Bbox, TransformedBbox

Создаем BboxImage с текстом

Начнем с создания BboxImage с текстом. Создаем объект text с помощью метода text() и добавляем его в объект ax1. Затем создаем объект BboxImage с использованием метода add_artist(). Передаем метод get_window_extent объекта text в конструктор BboxImage, чтобы получить ограничивающую рамку для текста. Также передаем одномерный массив формы (1, 256) в параметр data конструктора BboxImage, чтобы создать изображение.

fig, (ax1, ax2) = plt.subplots(ncols=2)

txt = ax1.text(0.5, 0.5, "test", size=30, ha="center", color="w")
ax1.add_artist(
    BboxImage(txt.get_window_extent, data=np.arange(256).reshape((1, -1))))

Создаем BboxImage для каждой цветовой карты

Далее создаем BboxImage для каждой цветовой карты. Начинаем с создания списка всех цветовых карт с использованием метода plt.colormaps. Затем создаем цикл for, который перебирает список цветовых карт. Для каждой цветовой карты вычисляем позиции ix и iy с использованием метода divmod(). Затем создаем объект Bbox с использованием метода Bbox.from_bounds(). Передаем значения ix, iy, dx и dy в метод Bbox.from_bounds(), чтобы создать ограничивающую рамку. Затем создаем объект TransformedBbox с использованием объекта Bbox и объекта ax2.transAxes. Наконец, создаем объект BboxImage с использованием метода add_artist(). Передаем объект TransformedBbox в конструктор BboxImage, чтобы создать изображение с цветовой картой.

cmap_names = sorted(m for m in plt.colormaps if not m.endswith("_r"))

ncol = 2
nrow = len(cmap_names) // ncol + 1

xpad_fraction = 0.3
dx = 1 / (ncol + xpad_fraction * (ncol - 1))

ypad_fraction = 0.3
dy = 1 / (nrow + ypad_fraction * (nrow - 1))

for i, cmap_name in enumerate(cmap_names):
    ix, iy = divmod(i, nrow)
    bbox0 = Bbox.from_bounds(ix*dx*(1+xpad_fraction),
                             1 - iy*dy*(1+ypad_fraction) - dy,
                             dx, dy)
    bbox = TransformedBbox(bbox0, ax2.transAxes)
    ax2.add_artist(
        BboxImage(bbox, cmap=cmap_name, data=np.arange(256).reshape((1, -1))))

Показываем график

Наконец, показываем график с использованием метода show().

plt.show()

Резюме

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