Matplotlib Inset Locator

PythonPythonBeginner

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

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

Введение

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-туплов и вставки, центрированные в координатах рисунка.