如何用Matplotlib的pcolor实现沿Z轴堆叠2D密度图?
Matplotlib堆叠2D密度图(pcolor实现方法)
Matplotlib支持用pcolor实现堆叠2D密度图,只是pcolor本身没有像contourf那样直接的offset参数,需要手动通过3D坐标轴的属性调整来实现。
实现步骤
- 先创建3D坐标轴对象
- 绘制每个
pcolor图后,获取其返回的PolyCollection对象,调用set_3d_properties()方法设置Z轴偏移位置 - 调整Z轴范围,确保所有堆叠的图都能正常显示
完整示例代码
import matplotlib.pyplot as plt import numpy as np # 生成测试数据 x = np.linspace(-5, 5, 100) y = np.linspace(-5, 5, 100) X, Y = np.meshgrid(x, y) # 生成三组不同的密度数据 Z1 = np.exp(-(X**2 + Y**2)/2) Z2 = np.exp(-((X-2)**2 + (Y-2)**2)/2) Z3 = np.exp(-((X+2)**2 + (Y+2)**2)/2) # 创建3D绘图轴 fig = plt.figure(figsize=(8,6)) ax = fig.add_subplot(projection='3d') # 定义每个密度图的Z轴偏移量 z_offsets = [0, 1, 2] datasets = [Z1, Z2, Z3] cmaps = ['viridis', 'plasma', 'inferno'] # 循环绘制堆叠的pcolor图 for offset, data, cmap in zip(z_offsets, datasets, cmaps): pc = ax.pcolor(X, Y, data, cmap=cmap, alpha=0.7) # 设置当前pcolor图的Z轴位置 pc.set_3d_properties(offset=offset, zdir='z') # 配置坐标轴 ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('Z Offset') ax.set_zlim(-0.5, 2.5) plt.colorbar(pc, ax=ax, shrink=0.5) plt.show()
说明
set_3d_properties()方法可以给2D绘图对象添加3D空间属性,通过offset指定Z轴位置,zdir='z'表示沿Z轴方向堆叠,效果和contourf的offset参数完全一致。
内容的提问来源于stack exchange,提问作者Rain
相关产品推荐
相关产品推荐

