多元分布的等高线图

时间:2018-11-26 13:16:11

标签: python numpy matplotlib plot distribution

我有一个与A类有关的数据矩阵(Xa.shape = 100x2),而另一个与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)

1 个答案:

答案 0 :(得分:1)

输入:二维数据点-Xa的形状为[N,2]。这是2D空间中的N个点。

所需的输出:二维轮廓图。 countourf是实现此目的的正确工具,但请注意documentation。此功能绘制高度图的轮廓。

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

问题与发行有关。为了绘制一维分布图,我们将生成一个直方图。为此,以2D方式进行吧..让我们创建2D直方图! numpy.histogram2d将为我们做到这一点。通过将空间划分为规则的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]])

enter image description here