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

如何在Matplotlib中绘制3组多元高斯分布的3D等高线

嘿,我来帮你搞定这个多元高斯分布的3D等高线绘制问题!先补全你代码里的小疏漏,再一步步实现需求:

绘制多元高斯分布的3D等高线

完整实现代码

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from scipy import stats

# 你的高斯分布参数
mean0 = [3.1627717, 2.74815376]
cov0 = [[0.44675818, -0.04885433], [-0.04885433, 0.52484173]]
mean1 = [6.63373967, 6.82700035]
cov1 = [[0.46269969, 0.11528141], [0.11528141, 0.50237073]]
mean2 = [7.20726944, 2.61513787]
cov2 = [[0.38486096, -0.13042758], [-0.13042758, 0.40928813]]

# 生成x、y的线性空间(补全你代码里的缺失值)
x = np.linspace(0, 10, 100)
y = np.linspace(0, 10, 100)
# 转换为二维网格,用于计算每个(x,y)点的概率密度
X, Y = np.meshgrid(x, y)

# 分别计算三个高斯分布在网格点上的概率密度
rv0 = stats.multivariate_normal(mean0, cov0)
Z0 = rv0.pdf(np.dstack((X, Y)))

rv1 = stats.multivariate_normal(mean1, cov1)
Z1 = rv1.pdf(np.dstack((X, Y)))

rv2 = stats.multivariate_normal(mean2, cov2)
Z2 = rv2.pdf(np.dstack((X, Y)))

# 可选:叠加三个分布的密度,或者单独绘制单个分布
Z_total = Z0 + Z1 + Z2

# 创建3D绘图对象
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')

# 绘制3D等高线:参数50代表等高线层数,cmap指定颜色映射
ax.contour3D(X, Y, Z_total, 50, cmap='viridis')

# 设置坐标轴与标题
ax.set_xlabel('X Axis')
ax.set_ylabel('Y Axis')
ax.set_zlabel('Probability Density')
ax.set_title('3D Contour of Combined Multivariate Gaussian Distributions')

# 调整视角,让图形展示更清晰
ax.view_init(elev=30, azim=45)

plt.show()

关键细节说明

  • np.meshgrid(x, y):把一维的x、y数组转换成二维网格矩阵,这样才能对每个(x,y)坐标点计算概率密度。
  • stats.multivariate_normal.pdf():生成多元高斯分布实例后,调用pdf方法计算每个网格点的概率密度值。
  • ax.contour3D():Matplotlib绘制3D等高线的核心函数,你可以通过调整层数参数(示例中的50)来控制等高线的密集程度,更换cmap值切换配色方案。
  • 如果想单独展示某一个高斯分布的3D等高线,只需把Z_total换成Z0/Z1/Z2即可;也可以在同一个图中多次调用contour3D,用不同颜色区分多个分布。

内容的提问来源于stack exchange,提问作者bluey31

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:29:41