Введение
Matplotlib - это библиотека визуализации данных на Python. Функция .inset_locator позволяет легко размещать вставки в углах осей. В этом практическом занятии мы изучим, как использовать функцию .inset_locator для создания вставок в графиках Matplotlib.
Советы по работе с ВМ
После запуска ВМ кликните в верхнем левом углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.
Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.
Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Создание фигуры с двумя подграфиками
Во - первых, нам нужно создать фигуру с двумя подграфиками. Мы будем использовать метод plt.subplots(), чтобы создать фигуру с двумя рядом стоящими подграфиками.
import matplotlib.pyplot as plt
fig, (ax, ax2) = plt.subplots(1, 2, figsize=[5.5, 2.8])
Создание вставочных осей
Далее мы создадим вставочные оси в каждом из подграфиков. Мы будем использовать метод inset_axes(), чтобы создать вставочные оси. Мы создадим четыре вставки с разными размерами и расположениями.
from mpl_toolkits.axes_grid1.inset_locator import inset_axes
## Создайте вставку шириной 1,3 дюйма и высотой 0,9 дюйма
## в стандартном верхнем правом положении
axins = inset_axes(ax, width=1.3, height=0.9)
## Создайте вставку шириной 30% и высотой 40% ограничивающего прямоугольника родительской оси
## в нижнем левом углу (loc = 3)
axins2 = inset_axes(ax, width="30%", height="40%", loc=3)
## Создайте вставку с смешанными параметрами во втором подграфике;
## ширина составляет 30% ограничивающего прямоугольника родительской оси и
## высота 1 дюйм в верхнем левом углу (loc = 2)
axins3 = inset_axes(ax2, width="30%", height=1., loc=2)
## Создайте вставку в нижнем правом углу (loc = 4) с borderpad = 1, то есть
## 10 точек отступа (так как 10pt - это стандартный размер шрифта) от родительской оси
axins4 = inset_axes(ax2, width="20%", height="20%", loc=4, borderpad=1)
Отключить метки делений
Чтобы удалить метки делений из каждой вставки, мы можем использовать метод tick_params() и установить labelleft и labelbottom в False.
## Отключить метки делений вставок
for axi in [axins, axins2, axins3, axins4]:
axi.tick_params(labelleft=False, labelbottom=False)
Управление позицией и размером вставки
Мы можем использовать параметры bbox_to_anchor и bbox_transform, чтобы контролировать позицию и размер вставки. Эти параметры позволяют точно контролировать позицию и размер вставки или даже располагать вставку в совершенно произвольных позициях.
## Мы используем преобразование осей в качестве bbox_transform. Поэтому ограничивающий прямоугольник
## должен быть задан в координатах осей ((0, 0) - это нижний левый угол
## осей, (1, 1) - верхний правый угол).
## Граница ограничивающего прямоугольника (.2,.4,.6,.5) начинается в (.2,.4) и имеет размеры до (.8,.9)
## в этих координатах.
## Внутри этого ограничивающего прямоугольника создается вставка, которая имеет половину ширины ограничивающего прямоугольника и
## трехчетверти его высоты. Нижний левый угол вставки выровнен с нижним левым углом ограничивающего прямоугольника (loc = 3).
## Затем вставка смещается на стандартный 0,5 в единицах размера шрифта.
axins = inset_axes(ax, width="50%", height="75%",
bbox_to_anchor=(.2,.4,.6,.5),
bbox_transform=ax.transAxes, loc=3)
Создание вставок с произвольными позициями
Мы можем создать вставки с произвольными позициями, используя параметр bbox_to_anchor для указания ограничивающего прямоугольника в координатах данных и параметр bbox_transform для указания преобразования для ограничивающего прямоугольника.
## Создайте вставку в координатах данных, используя ax.transData в качестве преобразования
axins3 = inset_axes(ax2, width="100%", height="100%",
bbox_to_anchor=(1e-2, 2, 1e3, 3),
bbox_transform=ax2.transData, loc=2, borderpad=0)
Создание вставки за пределами осей
Мы можем создать вставку за пределами осей, используя параметр bbox_to_anchor для указания ограничивающего прямоугольника в координатах осей, который выходит за пределы осей.
## Создайте вставку за пределами осей
axins = inset_axes(ax, width="100%", height="100%",
bbox_to_anchor=(1.05,.6,.5,.4),
bbox_transform=ax.transAxes, loc=2, borderpad=0)
Создание вставки с ограничивающим прямоугольником в виде 2-тупла
Мы можем создать вставку с ограничивающим прямоугольником в виде 2-тупла, указав ширину и высоту в дюймах и используя параметр bbox_to_anchor для указания нижнего левого угла вставки.
## Создайте вставку с ограничивающим прямоугольником в виде 2-тупла. Обратите внимание, что это создает
## ограничивающий прямоугольник без размеров. Поэтому это имеет смысл только при указании
## ширины и высоты в абсолютных единицах (дюймах).
axins2 = inset_axes(ax, width=0.5, height=0.4,
bbox_to_anchor=(0.33, 0.25),
bbox_transform=ax.transAxes, loc=3, borderpad=0)
Создание вставки, центрированной в координатах рисунка
Мы можем создать вставку, которая по горизонтали центрирована в координатах рисунка и по вертикали привязана к выравниванию с осями, используя метод blended_transform_factory(), чтобы создать смешанное преобразование и используя его в качестве параметра bbox_transform.
## Создайте вставку, которая по горизонтали центрирована в координатах рисунка и по вертикали
## привязана к выравниванию с осями.
from matplotlib.transforms import blended_transform_factory
transform = blended_transform_factory(fig.transFigure, ax2.transAxes)
axins4 = inset_axes(ax2, width="16%", height="34%",
bbox_to_anchor=(0, 0, 1, 1),
bbox_transform=transform, loc=8, borderpad=0)
Резюме
В этом практическом занятии мы узнали, как использовать функцию .inset_locator в Matplotlib для создания вставок на графиках. Мы создали вставки различных размеров и расположений, контролировали позицию и размер вставки и создали вставки с произвольными позициями. Мы также создали вставки за пределами осей, вставки с ограничивающими прямоугольниками в виде 2-туплов и вставки, центрированные в координатах рисунка.