多元分布等值线图

Contour plot of multivariate distribution

我有一个与 class A 相关的数据矩阵 (Xa.shape = 100x2) 和另一个与 class B 相关的数据矩阵。我使用下面的代码创建了这两个数据,我想绘制数据的等高线图。但是我尝试的方法不起作用,只是创建了一张蓝色图片。如何创建此类数据的正确等高线图?

N = 1000

mean_a = [0, 0]
cov_a = [[1, 0], [0, 100]]  # diagonal covariance

mean_b = [5, 0]
cov_b = [[5, 0], [0, 500]]  # diagonal covariance

Xa = np.random.multivariate_normal(mean_a, cov_a, N)
Xb = np.random.multivariate_normal(mean_b, cov_b, N)
fig, ax3 = plt.subplots(nrows=1,ncols=1,figsize=(15,8))
ax3.contourf(Xa)

输入: 二维数据点 - Xa 的形状为 [N, 2]。这些是 2D space.

中的 N 个点

所需输出: 二维等高线图。 countourf 是正确的工具,但请注意 documentation。此函数绘制高度图.

的轮廓

缺少步骤: 将单个数据点转换为高度图。

问题是关于分布的。要绘制一维分布,我们将生成直方图。要在 2D 中这样做,嗯..让我们创建一个 2D 直方图! numpy.histogram2d 将为我们做到这一点。它通过将 space 划分为常规 bin 并计算落入每个 bin 的数据点数来创建适合 contourf 的高度图。

我们开始:

N = 1000

mean_a = [0, 0]
cov_a = [[2, 1], [1, 2]]

Xa = np.random.multivariate_normal(mean_a, cov_a, N)
fig, ax3 = plt.subplots(nrows=1,ncols=1,figsize=(15,8))

(counts, x_bins, y_bins) = np.histogram2d(Xa[:, 0], Xa[:, 1])
ax3.contourf(counts, extent=[x_bins[0], x_bins[-1], y_bins[0], y_bins[-1]])