本文将会详细阐述二维正态分布图Python代码,在此之前,我们先对标题进行解答。二维正态分布图Python代码用于绘制二维正态分布函数的可视化图表。
一、绘制二维正态分布图
二维正态分布是常见的统计分布之一,其概率密度函数可以用如下公式表示:
x, y = np.mgrid[-1:1:.01, -1:1:.01]
pos = np.empty(x.shape + (2,))
pos[:, :, 0] = x
pos[:, :, 1] = y
rv = multivariate_normal([0, 0], [[1, 0], [0, 1]])
plt.contourf(x, y, rv.pdf(pos))
plt.show()
首先,使用np.mgrid生成二维网格,指定范围为[-1:1], 步长为0.01. 使用np.empty创建一个空数组pos,并将x和y赋值给pos的前两列,这里的pos[:, :, 0]表示数组的第一维,pos[:, :, 1]表示数组的第二维。接下来,使用multivariate_normal创建一个二维正态分布函数,并将其作用于pos数组,生成一个二维数组。最后,使用plt.contourf绘制等高线图,使用plt.show显示图表。
二、自定义二维正态分布函数
除了使用默认的二维正态分布函数,我们还可以根据实际需要自定义二维正态分布函数。下面的代码展示了如何自定义二维正态分布函数:
x, y = np.mgrid[-1:1:.01, -1:1:.01]
pos = np.empty(x.shape + (2,))
pos[:, :, 0] = x
pos[:, :, 1] = y
# 自定义二维正态分布函数
mu = [0.5, 0.5]
sigma = [[0.3, 0.2], [0.2, 0.3]]
rv = multivariate_normal(mu, sigma)
plt.contourf(x, y, rv.pdf(pos))
plt.show()
该代码与上一个例子的不同之处在于,我们自定义了均值矩阵mu和协方差矩阵sigma,并将其作为参数传递给multivariate_normal函数。然后,使用自定义的二维正态分布函数rv作用于pos数组,生成一个二维数组,并将其作为参数传递给plt.contourf函数,绘制等高线图。
三、二维正态分布图与散点图的结合
我们也可以将二维正态分布图与散点图结合起来,以展示数据分布的情况。下面是实现代码:
x, y = np.mgrid[-1:1:.01, -1:1:.01]
pos = np.empty(x.shape + (2,))
pos[:, :, 0] = x
pos[:, :, 1] = y
# 自定义二维正态分布函数
mu = [0.5, 0.5]
sigma = [[0.3, 0.2], [0.2, 0.3]]
rv = multivariate_normal(mu, sigma)
# 生成随机样本
sample = np.random.multivariate_normal(mu, sigma, 50)
# 绘制散点图
plt.scatter(sample[:,0], sample[:,1])
# 绘制等高线图
plt.contourf(x, y, rv.pdf(pos))
plt.show()
与前面的代码类似,我们先自定义二维正态分布函数,并使用该函数生成一个二维正态分布图。接下来,使用numpy.random.multivariate_normal函数生成50个随机样本,并使用plt.scatter函数绘制散点图。最后,使用plt.contourf函数绘制等高线图,并将二者合并在一张图表中,以展示数据的分布情况。
四、绘制三维正态分布曲面图
除了绘制二维正态分布图之外,我们还可以绘制三维正态分布曲面图。下面的代码展示了如何绘制三维正态分布曲面图:
from mpl_toolkits.mplot3d import Axes3D
# 自定义三维正态分布函数
mu = [0, 0, 0]
sigma = [[1, 0.5, 0.5],
[0.5, 1, 0.5],
[0.5, 0.5, 1]]
rv = multivariate_normal(mu, sigma)
# 生成三维网格
x, y, z = np.mgrid[-1:1:.01, -1:1:.01, -1:1:.01]
pos = np.empty(x.shape + (3,))
pos[:, :, :, 0] = x
pos[:, :, :, 1] = y
pos[:, :, :, 2] = z
# 绘制三维曲面图
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x, y, rv.pdf(pos), cmap='coolwarm')
plt.show()
首先,我们自定义三维正态分布函数,并生成一个三维网格,使用该函数作用于三维网格,生成一个三维数组。然后,使用fig = plt.figure()和ax = fig.add_subplot(111, projection=’3d’)绘制三维曲面图,并使用ax.plot_surface函数绘制曲面,并使用cmap=’coolwarm’指定颜色映射。最后,调用plt.show函数显示图表。