Введение
В этом практическом занятии вы научитесь создавать 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 для каждой цветовой карты. Вы можете использовать эти знания для создания изображений с различными ограничивающими рамками и цветовыми картами.