Matplotlib:如何在同图绘制3D分布的2D轮廓并置于z=-1处
解决3D曲面下显示投影轮廓的问题
这个问题我之前也碰到过,其实只需要给contour函数加两个关键参数,就能把2D轮廓固定在z=-1的位置作为投影显示,不会被3D曲面遮挡。下面是具体的实现步骤和代码示例:
核心思路
Matplotlib的3D坐标轴支持将轮廓投影到指定的平面上,通过zdir和offset参数可以指定投影的方向和平面位置——我们只需要把投影平面设为z=-1即可。
完整代码示例
import numpy as np import matplotlib.pyplot as plt from matplotlib import cm # 生成数据:二维正态分布的概率密度函数 x = np.linspace(-3, 3, 100) y = np.linspace(-3, 3, 100) X, Y = np.meshgrid(x, y) # 二维正态分布PDF公式 Z0 = np.exp(-(X**2 + Y**2)/2) / (2 * np.pi) # 创建3D坐标轴 fig = plt.figure(figsize=(10,7)) ax = fig.add_subplot(projection='3d') # 绘制3D曲面 surf = ax.plot_surface(X, Y, Z0, cmap=cm.coolwarm, linewidth=0, antialiased=False) # 绘制z=-1位置的投影轮廓(关键就在这行!) # zdir='z'表示投影到z轴方向的平面,offset=-1指定平面的z坐标 contour = ax.contour(X, Y, Z0, zdir='z', offset=-1, cmap=cm.coolwarm) # 设置z轴范围,确保z=-1的位置能完整显示 ax.set_zlim(-1.1, np.max(Z0)) # 添加颜色条 fig.colorbar(surf, shrink=0.5, aspect=5) plt.show()
关键参数解释
zdir='z':指定轮廓投影到与z轴垂直的平面上(也就是xy平面的平行面)offset=-1:把这个投影平面固定在z=-1的位置,这样轮廓就会显示在3D曲面的下方,不会被遮挡
如果想要填充样式的投影轮廓,只需要把ax.contour换成ax.contourf即可,参数完全一样,视觉效果会更突出。
内容的提问来源于stack exchange,提问作者Lauren
相关产品推荐
相关产品推荐

