箭头指南#

向绘图添加箭头补丁。

箭头通常用于注释图。本教程展示了如何绘制在图上的数据限制发生变化时表现不同的箭头。通常,绘图上的点可以固定在“数据空间”或“显示空间”中。当数据限制发生变化时,在数据空间中绘制的东西会移动 - 例如散点图中的点。当数据限制改变时,显示空间中绘制的内容保持静态 - 例如图形标题或轴标签。

箭头由头部(可能还有尾部)和在起点和终点之间绘制的茎组成,从现在开始称为“锚点”。在这里,我们展示了绘制箭头的三个用例,具体取决于头部或锚点是否需要固定在数据或显示空间中:

  1. 头部形状固定在显示空间,锚点固定在数据空间

  2. 显示空间中固定的头部形状和锚点

  3. 整个补丁固定在数据空间中

下面依次介绍每个用例。

import matplotlib.patches as mpatches
import matplotlib.pyplot as plt
x_tail = 0.1
y_tail = 0.5
x_head = 0.9
y_head = 0.8
dx = x_head - x_tail
dy = y_head - y_tail

头部形状固定在显示空间中,锚点固定在数据空间中#

如果您正在注释绘图,并且不希望箭头在平移或缩放绘图时改变形状或位置,这很有用。

在这种情况下,我们使用patches.FancyArrowPatch.

请注意,当轴范围改变时,箭头形状保持不变,但锚点移动。

fig, axs = plt.subplots(nrows=2)
arrow = mpatches.FancyArrowPatch((x_tail, y_tail), (x_head, y_head),
                                 mutation_scale=100)
axs[0].add_patch(arrow)

arrow = mpatches.FancyArrowPatch((x_tail, y_tail), (x_head, y_head),
                                 mutation_scale=100)
axs[1].add_patch(arrow)
axs[1].set(xlim=(0, 2), ylim=(0, 2))
箭头指南
[(0.0, 2.0), (0.0, 2.0)]

头部形状和锚点固定在显示空间中#

如果您正在注释绘图,并且不希望箭头在平移或缩放绘图时改变形状或位置,这很有用。

在这种情况下,我们使用patches.FancyArrowPatch, 并传递关键字参数 transform=ax.transAxeswhereax是我们要添加补丁的轴。

请注意,当轴限制发生变化时,箭头的形状和位置保持不变。

fig, axs = plt.subplots(nrows=2)
arrow = mpatches.FancyArrowPatch((x_tail, y_tail), (x_head, y_head),
                                 mutation_scale=100,
                                 transform=axs[0].transAxes)
axs[0].add_patch(arrow)

arrow = mpatches.FancyArrowPatch((x_tail, y_tail), (x_head, y_head),
                                 mutation_scale=100,
                                 transform=axs[1].transAxes)
axs[1].add_patch(arrow)
axs[1].set(xlim=(0, 2), ylim=(0, 2))
箭头指南
[(0.0, 2.0), (0.0, 2.0)]

头部形状和锚点固定在数据空间中#

在这种情况下,我们使用patches.Arrow, 或patches.FancyArrow(后者为橙色)。

请注意,当轴范围改变时,箭头的形状和位置也会改变。

FancyArrow的 API 比较笨拙,特别需要通过 ,length_includes_head=True使箭头尖端远离箭头起点。它仅包含在此参考中,因为它是(绿色)返回的箭头类。(dx, dy)Axes.arrow

fig, axs = plt.subplots(nrows=2)

arrow = mpatches.Arrow(x_tail, y_tail, dx, dy)
axs[0].add_patch(arrow)
arrow = mpatches.FancyArrow(x_tail, y_tail - .4, dx, dy,
                            width=.1, length_includes_head=True, color="C1")
axs[0].add_patch(arrow)
axs[0].arrow(x_tail + 1, y_tail - .4, dx, dy,
             width=.1, length_includes_head=True, color="C2")

arrow = mpatches.Arrow(x_tail, y_tail, dx, dy)
axs[1].add_patch(arrow)
arrow = mpatches.FancyArrow(x_tail, y_tail - .4, dx, dy,
                            width=.1, length_includes_head=True, color="C1")
axs[1].add_patch(arrow)
axs[1].arrow(x_tail + 1, y_tail - .4, dx, dy,
             width=.1, length_includes_head=True, color="C2")
axs[1].set(xlim=(0, 2), ylim=(0, 2))
箭头指南
[(0.0, 2.0), (0.0, 2.0)]

脚本总运行时间:(0分1.191秒)

由 Sphinx-Gallery 生成的画廊