You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:25:22