调整 Matplotlib 绘图顺序

MatplotlibMatplotlibBeginner
立即练习

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

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本教程中,我们将了解 Matplotlib 中艺术家对象的绘制顺序,以及如何使用 zorder 属性调整顺序。我们还将探讨如何更改单个艺术家对象的顺序,以及不同类型艺术家对象的 zorder 默认值。

虚拟机使用提示

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

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

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

理解Zorder

Matplotlib 中的 zorder 属性是一个浮点数,用于确定艺术家对象的绘制顺序。zorder 值较高的艺术家对象会绘制在 zorder 值较低的对象之上。zorder 的默认值取决于艺术家对象的类型。例如,图像的默认 zorder 为 0,而补丁(patch)的默认 zorder 为 1。

更改Zorder

要更改艺术家对象的绘制顺序,我们可以在创建艺术家对象时使用 zorder 参数显式设置其 zorder 属性。例如,在散点图中,我们可以通过将点的 zorder 设置为高于线的 zorder 值,将点移动到线的上方。

import matplotlib.pyplot as plt
import numpy as np

r = np.linspace(0.3, 1, 30)
theta = np.linspace(0, 4*np.pi, 30)
x = r * np.sin(theta)
y = r * np.cos(theta)

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(6, 3.2))

ax1.plot(x, y, 'C3', lw=3)
ax1.scatter(x, y, s=120)
ax1.set_title('Lines on top of dots')

ax2.plot(x, y, 'C3', lw=3)
ax2.scatter(x, y, s=120, zorder=2.5)  ## move dots on top of line
ax2.set_title('Dots on top of lines')

plt.tight_layout()
plt.show()

设置刻度和网格线的Zorder

我们可以使用 set_axisbelow() 方法或 axes.axisbelow 参数来设置刻度和网格线的 zorder

ax = plt.axes()
ax.plot([1, 2, 3], [2, 4, 3])
ax.set_axisbelow(True)
ax.yaxis.grid(color='gray', linestyle='dashed')

元素的自定义顺序

我们也可以按照自定义顺序设置元素的 zorder。例如,我们可以将图例(legend)的 zorder 设置在两条线之间。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 7.5, 100)
plt.rcParams['lines.linewidth'] = 5
plt.figure()
plt.plot(x, np.sin(x), label='zorder=2', zorder=2)  ## bottom
plt.plot(x, np.sin(x+0.5), label='zorder=3',  zorder=3)
plt.axhline(0, label='zorder=2.5', color='lightgrey', zorder=2.5)
plt.title('Custom order of elements')
l = plt.legend(loc='upper right')
l.set_zorder(2.5)  ## legend between blue and orange line
plt.show()

总结

在本教程中,我们学习了Matplotlib中的 zorder 属性以及如何更改艺术家对象的绘制顺序。我们还探讨了如何设置刻度和网格线的 zorder 以及创建元素的自定义顺序。在创建具有重叠元素的复杂可视化时,理解 zorder 至关重要。