Matplotlib - Z-Order Demo
z-order demo(深度顺序)指的是在三维空间中物体沿 z 轴(深度轴)的排列。具有较高 z-order 值的物体看起来更靠近观察者,而较低 z-order 值的物体则看起来更远。
从上图可以看出,一个蓝色方块和一个红色圆圈绘制在相同的坐标轴上。圆圈具有更高的 Z-order,因此它被绘制在方块之上,尽管它们的坐标有重叠。
Matplotlib 中的 Zorder Demo
在 Matplotlib 中,我们可以使用 set_zorder() 函数来指定绘图元素的绘制顺序(z-order)。具有更高 zorder 的元素将被绘制在具有较低 zorder 的元素之上。
当你有多个绘图元素(如线条、标记或补丁)时,这个函数特别有用,你希望某些元素在视觉上更突出。
set_zorder() 函数
set_zorder() 函数用于控制不同绘图元素的堆叠顺序。该函数接受一个表示所需 z-order 的数值,并修改调用它的 Matplotlib artist 的内部状态,为该 artist 设置指定的 z-order。
语法
以下是 Matplotlib 中 set_zorder() 函数的语法 −
artist.set_zorder(z_order_value)
其中,
- artist 指的是你想要指定 z-order 的 Matplotlib artist(例如 line、patch 等)。
- z_order_value 是一个表示所需 z-order 的数值。
示例 - 使用 zorder 控制绘制顺序
你可以通过控制 zorder 来管理 matplotlib 中绘图中不同元素的层叠。zorder 参数为每个元素分配一个数值,决定它们的绘制顺序。较高的值表示元素被绘制在上层,帮助你自定义绘图的视觉层次结构。
在以下示例中,我们创建了一条蓝色线条和一个红色圆圈。然后使用 set_zorder() 函数通过为其指定更高的 zorder 值来将线条绘制在上层 −
import matplotlib.pyplot as plt
# 创建一条线和一个圆
line, = plt.plot([0, 1], [0, 1], color='blue', linewidth=2, label='Line')
circle = plt.Circle((0.5, 0.5), 0.1, color='red', label='Circle')
# 设置不同的 z-order
line.set_zorder(2)
circle.set_zorder(1)
# 将元素添加到绘图中
plt.gca().add_patch(circle)
plt.legend()
# 显示绘图
plt.title('Controlling Drawing Order with zorder')
plt.show()
输出
执行上述代码后,我们得到以下输出 −
示例 - 使用 zorder 层叠柱状图和文本
你也可以在 matplotlib 中控制柱状图和文本的堆叠顺序。通过为柱状图和文本分配不同的 zorder 值,你可以管理它们的绘制顺序,使绘图更具信息性和视觉吸引力。
在这里,我们创建了一个绿色柱状图和一个蓝色文本注释。然后设置不同的 zorder 值,使文本显示在柱状图之上 −
import matplotlib.pyplot as plt
# 创建柱状图和文本
bar = plt.bar([1, 2, 3], [4, 7, 2], color='green', label='Bars')
text = plt.text(2, 5, 'Important', color='blue', fontsize=12)
# 设置不同的 z-order
bar[0].set_zorder(2)
text.set_zorder(1)
# 显示绘图
plt.title('Layering Bars and Text with zorder')
plt.legend()
plt.show()
输出
以下是上述代码的输出 −

示例 - 使用 zorder 排序散点图
你还可以在 matplotlib 中使用 zorder 来控制同一图表上多个散点图的绘制顺序。这有助于比较不同的数据点集,确保某些散点图显示在其他散点图前面,从而使整体可视化更清晰。
现在,我们创建两个散点图,并使用 zorder 参数控制它们的绘制顺序 −
import matplotlib.pyplot as plt
import numpy as np
# 创建具有不同 zorder 的散点图
x = np.random.rand(10)
y = np.random.rand(10)
plt.scatter(x, y, s=100, color='orange', label='Scatter (Low Z-Order)', zorder=1)
plt.scatter(x, y + 0.1, s=100, color='blue', label='Scatter (High Z-Order)', zorder=2)
# 显示图形
plt.title('Ordering Scatter Plots with zorder')
plt.legend()
plt.show()
输出
上述代码的输出如下 −
示例 - 使用 zorder 叠加多个图形
在 Matplotlib 中,使用 zorder 叠加多个图形可以让你在同一图表上叠加不同的图形。这有助于同时展示多个数据集,确保特定图形在视觉上层叠在其他图形之上,从而获得清晰的视图。
在下面的示例中,我们在同一图表上叠加三个图形(Sin(x)、Cos(x) 以及 Sin(x) 和 Cos(x) 的和),并使用不同的 zorder 值控制它们的绘制顺序 −
import matplotlib.pyplot as plt
import numpy as np
# 为三个不同的图形创建数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.sin(x) + np.cos(x)
# 为每个数据集绘制图形并指定 zorder
plt.plot(x, y1, label='Sin(x)', color='blue', zorder=1)
plt.plot(x, y2, label='Cos(x)', color='orange', zorder=2)
plt.plot(x, y3, label='Sin(x) + Cos(x)', color='green', zorder=3)
# 显示图例和标题
plt.legend()
plt.title('Overlaying Multiple Plots with zorder')
# 显示图形
plt.show()
输出
得到的输出如图所示 −
