Matplotlib 带锚定方向的箭头

Beginner

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

简介

在本实验中,我们将学习如何在 Matplotlib 中创建带锚定的方向箭头。带锚定的方向箭头是指向特定方向并锚定在绘图上的箭头。这些箭头对于在绘图中指示特定方向或取向很有用。我们将学习如何创建简单箭头以及高对比度和旋转箭头。

虚拟机提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。

导入必要的库

首先,我们需要导入必要的库,例如 Matplotlib、NumPy、Matplotlib 字体管理器,以及来自 mpl_toolkits.axes_grid1 的 AnchoredDirectionArrows。我们将使用这些库来创建带锚定的方向箭头。

import matplotlib.pyplot as plt
import numpy as np

import matplotlib.font_manager as fm
from mpl_toolkits.axes_grid1.anchored_artists import AnchoredDirectionArrows

创建一个绘图

接下来,我们将使用 NumPy 创建一个简单的绘图。这个绘图将作为带锚定方向箭头的背景。

## 为了可重复性固定随机状态
np.random.seed(19680801)

fig, ax = plt.subplots()
ax.imshow(np.random.random((10, 10)))

创建一个简单箭头

现在,我们将使用AnchoredDirectionArrows类创建一个简单的带锚定方向箭头。这个箭头将在绘图中指示 X 和 Y 方向。

## 简单示例
simple_arrow = AnchoredDirectionArrows(ax.transAxes, 'X', 'Y')
ax.add_artist(simple_arrow)

创建一个高对比度箭头

接下来,我们将创建一个高对比度的带锚定方向箭头。这个箭头将有白色轮廓和黑色填充。

high_contrast_part_1 = AnchoredDirectionArrows(
                            ax.transAxes,
                            '111', r'11$\overline{2}$',
                            loc='upper right',
                            arrow_props={'ec': 'w', 'fc': 'none', 'alpha': 1,
                                         'lw': 2}
                            )
ax.add_artist(high_contrast_part_1)

high_contrast_part_2 = AnchoredDirectionArrows(
                            ax.transAxes,
                            '111', r'11$\overline{2}$',
                            loc='upper right',
                            arrow_props={'ec': 'none', 'fc': 'k'},
                            text_props={'ec': 'w', 'fc': 'k', 'lw': 0.4}
                            )
ax.add_artist(high_contrast_part_2)

创建一个旋转箭头

在这一步中,我们将创建一个旋转的带锚定方向箭头。这个箭头将旋转 30 度,并使用衬线字体。

fontprops = fm.FontProperties(family='serif')

rotated_arrow = AnchoredDirectionArrows(
                    ax.transAxes,
                    '30', '120',
                    loc='center',
                    color='w',
                    angle=30,
                    fontproperties=fontprops
                    )
ax.add_artist(rotated_arrow)

改变箭头方向

在这一步中,我们将创建三个指向不同方向的带锚定方向箭头。这些箭头将具有不同的长度和宽高比。

a1 = AnchoredDirectionArrows(
        ax.transAxes, 'A', 'B', loc='lower center',
        length=-0.15,
        sep_x=0.03, sep_y=0.03,
        color='r'
    )
ax.add_artist(a1)

a2 = AnchoredDirectionArrows(
        ax.transAxes, 'A', ' B', loc='lower left',
        aspect_ratio=-1,
        sep_x=0.01, sep_y=-0.02,
        color='orange'
        )
ax.add_artist(a2)


a3 = AnchoredDirectionArrows(
        ax.transAxes, ' A', 'B', loc='lower right',
        length=-0.15,
        aspect_ratio=-1,
        sep_y=-0.1, sep_x=0.04,
        color='cyan'
        )
ax.add_artist(a3)

显示绘图

最后,我们将显示包含所有带锚定方向箭头的绘图。

plt.show()

总结

在本实验中,我们学习了如何在 Matplotlib 中创建带锚定方向的箭头。我们创建了简单的箭头,以及高对比度和旋转的箭头。我们还学习了如何改变箭头的方向和宽高比。带锚定方向的箭头对于在绘图中指示特定方向或取向很有用。