### 绘制多元正态分布函数图像
对于绘制多元正态分布函数的图像,可以采用`matplotlib`和`seaborn`库中的工具。由于多元正态分布在二维以上空间中定义,通常通过三维表面图或等高线图展示其概率密度。
#### 使用Matplotlib绘制三维表面图
下面是一个例子,展示了如何创建一个二元正态分布的概率密度函数(PDF),并通过三维表面图表示:
```python
import numpy as np
from scipy.stats import multivariate_normal
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 定义均值向量mu和协方差矩阵sigma
mu = np.array([0, 0])
sigma = np.array([[1, 0.5],
[0.5, 1]])
# 创建网格数据用于绘图
x, y = np.meshgrid(np.linspace(-3, 3, 50), np.linspace(-3, 3, 50))
pos = np.dstack((x, y))
# 初始化多变量正态分布对象rv
rv = multivariate_normal(mu, sigma)
# 计算PDF值
z = rv.pdf(pos)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x, y, z, cmap='viridis')
plt.show()
```
这段代码首先设置了二元正态分布所需的参数——均值向量μ和协方差矩阵Σ;接着构建了一个均匀间隔点组成的网格作为输入给定位置处计算PDF的基础;最后使用这些信息来生成并渲染三维曲面图表[^1]。
#### 利用Seaborn绘制等高线图
另一种常见的方法是利用`seaborn.kdeplot()`函数来制作基于核密度估计(KDE)的等高线图,它能够很好地捕捉到数据集内部结构特征的同时也适用于连续型随机变量之间的联合分布情况:
```python
import seaborn as sns
import pandas as pd
data = {'X': pos[:, :, 0].flatten(), 'Y': pos[:, :, 1].flatten()}
df = pd.DataFrame(data=data)
df['Z'] = rv.pdf(df[['X','Y']].values)
sns.set(style="white")
g = sns.JointGrid(data=df, x="X", y="Y", space=0, ratio=7)
_ = g.plot_joint(sns.kdeplot,
fill=True,
clip=((min(df.X)-0.2,max(df.X)+0.2),(min(df.Y)-0.2,max(df.Y)+0.2)),
thresh=0.05,
levels=100,
alpha=.8,
cbar=True)
g.plot_marginals(sns.histplot, color="#03012e", kde=False, bins=25)
plt.show()
```
此段脚本先将之前生成的位置坐标转换成DataFrame格式以便于后续操作;随后调用了`sns.jointplot()`配合自定义选项实现了更加美观直观的效果,其中不仅包含了核心部分即两个维度间的相互关系(中间区域),还额外附带了各自边缘上的直方图用来辅助理解单个属性下的频数分布状况[^2].