Введение
В этом практическом занятии вы научитесь добавлять аннотации углов к стилям скобочных стрелок, созданным с использованием FancyArrowPatch в Matplotlib. Аннотации углов полезны для указания направления и размера углов на графике. В конце этого практического занятия вы сможете создавать стили скобочных стрелок с аннотациями углов и настраивать их, чтобы соответствовать вашим конкретным потребностям.
Советы по работе с ВМ
После запуска ВМ кликните в левом верхнем углу, чтобы переключиться на вкладку Ноутбук и получить доступ к Jupyter Notebook для практики.
Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook полностью загрузится. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.
Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Импортируем необходимые библиотеки и настраиваем график
Во - первых, нам нужно импортировать необходимые библиотеки и настроить график. Мы будем использовать matplotlib.pyplot и numpy. Также создадим объект Figure и объект оси, на котором будем наносить наши данные.
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import FancyArrowPatch
fig, ax = plt.subplots()
ax.set(xlim=(0, 6), ylim=(-1, 5))
ax.set_title("Orientation of the bracket arrows relative to angleA and angleB")
Определяем функцию для получения точки повернутой вертикальной линии
Мы определим функцию, которая принимает координаты начала линии, длину линии и угол в градусах в качестве входных параметров и возвращает xy - координаты конца вертикальной линии, повернутой на указанный угол.
def get_point_of_rotated_vertical(origin, line_length, degrees):
"""Return xy coordinates of the vertical line end rotated by degrees."""
rad = np.deg2rad(-degrees)
return [origin[0] + line_length * np.sin(rad),
origin[1] + line_length * np.cos(rad)]
Создаем скобочные стрелочки с аннотациями углов
Мы создадим три стиля скобочных стрелочек с аннотациями углов с использованием FancyArrowPatch. Каждая скобочная стрелочка будет иметь разные значения угла для angleA и angleB. Также добавим вертикальные линии, чтобы показать положение аннотаций углов.
style = ']-['
for i, angle in enumerate([-40, 0, 60]):
y = 2*i
arrow_centers = ((1, y), (5, y))
vlines = ((1, y + 0.5), (5, y + 0.5))
anglesAB = (angle, -angle)
bracketstyle = f"{style}, angleA={anglesAB[0]}, angleB={anglesAB[1]}"
bracket = FancyArrowPatch(*arrow_centers, arrowstyle=bracketstyle,
mutation_scale=42)
ax.add_patch(bracket)
ax.text(3, y + 0.05, bracketstyle, ha="center", va="bottom", fontsize=14)
ax.vlines([line[0] for line in vlines], [y, y], [line[1] for line in vlines],
linestyles="--", color="C0")
Добавляем стрелки и текст с аннотацией углов
Мы добавим стрелки и текст с аннотацией углов к каждому стилю скобочных стрелок. Во - первых, получим верхние координаты для нарисованных участков при angleA и angleB. Затем определим направления соединения для стрелок аннотации. Наконец, добавим стрелки и текст с аннотацией на график.
## Get the top coordinates for the drawn patches at A and B
patch_tops = [get_point_of_rotated_vertical(center, 0.5, angle)
for center, angle in zip(arrow_centers, anglesAB)]
## Define the connection directions for the annotation arrows
connection_dirs = (1, -1) if angle > 0 else (-1, 1)
## Add arrows and annotation text
arrowstyle = "Simple, tail_width=0.5, head_width=4, head_length=8"
for vline, dir, patch_top, angle in zip(vlines, connection_dirs,
patch_tops, anglesAB):
kw = dict(connectionstyle=f"arc3,rad={dir * 0.5}",
arrowstyle=arrowstyle, color="C0")
ax.add_patch(FancyArrowPatch(vline, patch_top, **kw))
ax.text(vline[0] - dir * 0.15, y + 0.7, f'{angle}°', ha="center",
va="center")
Отображаем график
Мы будем отображать график с использованием plt.show().
plt.show()
Резюме
В этом практическом занятии вы узнали, как добавлять аннотации углов к стилям скобочных стрелок, созданным с использованием FancyArrowPatch в Matplotlib. Также вы узнали, как настраивать стили скобочных стрелок, чтобы соответствовать вашим конкретным потребностям. Следуя пошаговым инструкциям и примеру кода, вы теперь должны быть в состоянии создавать стили скобочных стрелок с аннотациями углов в своих собственных графиках Matplotlib.