Введение
В этом руководстве показано, как создать эффект приближения с использованием matplotlib. Эффект приближения позволяет соединять и приближать два различных оси.
Советы по работе с ВМ
После запуска ВМ перейдите в левый верхний угол и переключитесь на вкладку Ноутбук, чтобы приступить к практике с Jupyter Notebook.
Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook полностью загрузится. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.
Если вы столкнетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Импорт необходимых библиотек
В этом шаге мы импортируем необходимые библиотеки для этого руководства. Мы импортируем matplotlib и соответствующие библиотеки из mpl_toolkits.axes_grid1.
import matplotlib.pyplot as plt
from matplotlib.transforms import (Bbox, TransformedBbox,
blended_transform_factory)
from mpl_toolkits.axes_grid1.inset_locator import (BboxConnector,
BboxConnectorPatch,
BboxPatch)
Определение соединения между осями
В этом шаге мы определим соединение между двумя осями. Эта функция принимает две оси в качестве входных параметров, а также минимальные и максимальные значения по оси x. Затем она создает ограничивающую рамку и соединяет две оси.
def zoom_effect01(ax1, ax2, xmin, xmax, **kwargs):
bbox = Bbox.from_extents(xmin, 0, xmax, 1)
mybbox1 = TransformedBbox(bbox, ax1.get_xaxis_transform())
mybbox2 = TransformedBbox(bbox, ax2.get_xaxis_transform())
prop_patches = {**kwargs, "ec": "none", "alpha": 0.2}
c1, c2, bbox_patch1, bbox_patch2, p = connect_bbox(
mybbox1, mybbox2,
loc1a=3, loc2a=2, loc1b=4, loc2b=1,
prop_lines=kwargs, prop_patches=prop_patches)
ax1.add_patch(bbox_patch1)
ax2.add_patch(bbox_patch2)
ax2.add_patch(c1)
ax2.add_patch(c2)
ax2.add_patch(p)
return c1, c2, bbox_patch1, bbox_patch2, p
Создание второй оси с эффектом приближения
В этом шаге мы создадим вторую ось с эффектом приближения. Эта функция принимает две оси в качестве входных параметров. Затем она создает ограничивающую рамку для второй оси и соединяет ее с первой осью.
def zoom_effect02(ax1, ax2, **kwargs):
tt = ax1.transScale + (ax1.transLimits + ax2.transAxes)
trans = blended_transform_factory(ax2.transData, tt)
mybbox1 = ax1.bbox
mybbox2 = TransformedBbox(ax1.viewLim, trans)
prop_patches = {**kwargs, "ec": "none", "alpha": 0.2}
c1, c2, bbox_patch1, bbox_patch2, p = connect_bbox(
mybbox1, mybbox2,
loc1a=3, loc2a=2, loc1b=4, loc2b=1,
prop_lines=kwargs, prop_patches=prop_patches)
ax1.add_patch(bbox_patch1)
ax2.add_patch(bbox_patch2)
ax2.add_patch(c1)
ax2.add_patch(c2)
ax2.add_patch(p)
return c1, c2, bbox_patch1, bbox_patch2, p
Соединение осей
В этом шаге мы соединим оси и создадим эффект приближения. Мы создадим фигуру с четырьмя осями и соединим их с использованием функций zoom_effect01 и zoom_effect02.
axs = plt.figure().subplot_mosaic([
["zoom1", "zoom2"],
["main", "main"],
])
axs["main"].set(xlim=(0, 5))
zoom_effect01(axs["zoom1"], axs["main"], 0.2, 0.8)
axs["zoom2"].set(xlim=(2, 3))
zoom_effect02(axs["zoom2"], axs["main"])
plt.show()
Резюме
В этом руководстве мы узнали, как создать эффект приближения с использованием matplotlib. Мы сначала определили функцию для соединения осей, а затем создали вторую функцию для создания второй оси с эффектом приближения. Наконец, мы соединили оси и создали эффект приближения.