如何在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
相关产品推荐
相关产品推荐

