在 Matplotlib 绘图中旋转文本

Beginner

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

简介

本实验将演示如何在 Matplotlib 中相对于绘图上的一条线或一个对象而非屏幕坐标系旋转文本对象。当你想要相对于绘图上的特定内容旋转文本时,此技术会很有帮助。

虚拟机使用提示

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

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

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

绘制一条对角线

首先,我们将使用 Matplotlib 的plot()函数绘制一条 45 度角的对角线。

fig, ax = plt.subplots()

## 绘制对角线(45 度)
h = ax.plot(range(0, 10), range(0, 10))

调整绘图的界限

接下来,我们将调整绘图的界限,以便在屏幕上查看时,对角线不再是 45 度角。这将创建一种情况,即我们需要相对于这条线而不是屏幕坐标系旋转文本。

## 设置界限,以便在屏幕上看起来不再是 45 度
ax.set_xlim([-10, 20])

定义文本位置和旋转角度

现在我们将定义想要在图形上绘制文本的位置以及要使用的旋转角度。

## 绘制文本的位置
l1 = np.array((1, 1))
l2 = np.array((5, 5))

## 旋转角度
angle = 45

绘制未正确旋转的文本

现在我们将在不考虑线条旋转的情况下,在指定位置绘制文本。这将导致文本以 45 度角旋转,而这并非我们想要的效果。

## 绘制文本
th1 = ax.text(*l1, 'text not rotated correctly', fontsize=16,
              rotation=angle, rotation_mode='anchor')

绘制正确旋转的文本

最后,我们将在考虑线条旋转的情况下,在指定位置绘制文本。这将使文本相对于线条以正确的角度旋转。

## 绘制文本
th2 = ax.text(*l2, 'text rotated correctly', fontsize=16,
              rotation=angle, rotation_mode='anchor',
              transform_rotates_text=True)

显示图形

我们将显示图形,以查看两组绘制文本之间的差异。

plt.show()

总结

在本实验中,我们学习了如何在 Matplotlib 中相对于绘图上的线条或对象旋转文本对象。通过使用transform_rotates_text参数,我们能够确保文本相对于线条以正确的角度旋转,而不是相对于屏幕坐标系。