如何用Matplotlib在同一平面绘制两类高斯PDF的三维曲面图
Got it! 要在同一个3D坐标系里绘制两个协方差相同、均值不同的高斯PDF曲面其实很简单——你只需要在同一个3D绘图轴上依次渲染两个曲面就行。我给你整理了完整的可运行代码和关键说明,直接参考就能搞定:
核心思路
- 先实现通用的多元高斯PDF计算函数,支持输入任意均值、协方差和网格数据
- 生成x/y轴的网格点作为PDF的输入变量
- 定义两类的均值向量和共同协方差矩阵
- 分别计算两个PDF的z轴密度值
- 在同一个3D轴上绘制两个曲面,通过透明度和颜色区分,避免遮挡
完整代码示例
import numpy as np import matplotlib.pyplot as plt from matplotlib import cm from mpl_toolkits.mplot3d import Axes3D # 定义多元高斯PDF计算函数 def gaussian_pdf(x, y, mean, cov): # 将x/y网格转换为样本点矩阵 xy_samples = np.vstack([x.ravel(), y.ravel()]).T # 计算协方差的逆和行列式(用于PDF公式) inv_cov = np.linalg.inv(cov) det_cov = np.linalg.det(cov) # 计算指数部分 exponent = -0.5 * np.sum((xy_samples - mean) @ inv_cov * (xy_samples - mean), axis=1) # 计算PDF值并还原为网格形状 pdf_values = (1 / (2 * np.pi * np.sqrt(det_cov))) * np.exp(exponent) return pdf_values.reshape(x.shape) # 1. 创建x/y轴的网格数据 x_range = np.linspace(-5, 5, 100) y_range = np.linspace(-5, 5, 100) X, Y = np.meshgrid(x_range, y_range) # 2. 定义两类的参数(协方差相同,均值不同) mean_class1 = np.array([-1.5, -1.5]) mean_class2 = np.array([1.5, 1.5]) shared_cov = np.array([[1.2, 0.6], [0.6, 1.2]]) # 共同的协方差矩阵 # 3. 计算两个PDF的z轴值 Z1 = gaussian_pdf(X, Y, mean_class1, shared_cov) Z2 = gaussian_pdf(X, Y, mean_class2, shared_cov) # 4. 绘制3D双曲面 fig = plt.figure(figsize=(12, 8)) ax = fig.add_subplot(111, projection='3d') # 绘制第一个曲面(蓝色半透明) surf1 = ax.plot_surface(X, Y, Z1, cmap=cm.Blues, alpha=0.7) # 绘制第二个曲面(橙色半透明) surf2 = ax.plot_surface(X, Y, Z2, cmap=cm.Oranges, alpha=0.7) # 设置坐标轴与标题 ax.set_xlabel('X Variable', fontsize=10) ax.set_ylabel('Y Variable', fontsize=10) ax.set_zlabel('Probability Density', fontsize=10) ax.set_title('Two Gaussian PDFs (Same Covariance, Different Means)', fontsize=12) # 添加图例(3D曲面的图例需要手动绑定对象) ax.legend([surf1, surf2], ['Class 1 PDF', 'Class 2 PDF'], loc='upper right') # 调整视角,让两个曲面都清晰可见 ax.view_init(elev=35, azim=50) plt.tight_layout() plt.show()
关键细节说明
- 透明度设置:通过
alpha=0.7让两个曲面半透明,这样重叠区域不会完全遮挡,能同时看到两个曲面的形状 - 图例处理:3D曲面的
label参数不会自动生效,需要手动把曲面对象传入legend()函数 - 视角调整:用
view_init()调整俯仰角(elev)和方位角(azim),找到最适合观察两个曲面的角度
内容的提问来源于stack exchange,提问作者Sibs
相关产品推荐
相关产品推荐

