Matplotlib(hist2D)中的2D直方图如何工作?

时间:2019-02-20 15:10:34

标签: python matplotlib

hist2d function的文档中:

plt.hist2d(x,y , weights=weight)

x和y以及权重类似于array_,形状为(n,)。

根据文档,输出之一是:

  

h:二维数组

     

样本x和y的二维直方图。价值观   x中的x沿第一维直方图,y中的值为   沿第二维直方图。

如何创建2D阵列?想象

x = np.arange(1,10)
y = np.arange(1,10)
weights = x * y

二维数组是如何从这些数组中创建的?

我要重新解释之前here提出的问题(不是我的)。

1 个答案:

答案 0 :(得分:1)

2D直方图的工作原理与1D直方图相同。您定义一些箱,找出每个数据点在哪个箱内,然后计算每个箱中的点数。如果对直方图进行加权,则应将权重加起来,而不仅仅是计算数字。

例如

x = [1.6, 2.3, 2.7]
y = [0.7, 1.8, 1.3]

,我们想将它们与边缘合并到容器中

bins = [0,1,2,3] 

另外,您的权重可能是

weights = [0.6, 1, 2]

要可视化情况,

sc = plt.scatter(x,y,c=weights, vmin=0)
plt.colorbar(sc)

plt.xticks(bins)
plt.yticks(bins)
plt.grid()
plt.show()

enter image description here

现在我们可以用裸眼直方图:

在bin x = 1..2,y = 0..1 中,您只有一点。该点的权重为0.6,因此该bin的值为0.6
在bin x = 2..3,y = 1..2 中,您有两个点。它们的权重为12。因此,该bin的值为1+2=3

所有其他垃圾箱为空。总的来说,您的直方图看起来像

[[ 0.0, 0.6, 0.0 ]
 [ 0.0, 0.0, 3.0 ]
 [ 0.0, 0.0, 0.0 ]]

这确实是我们让numpy进行直方图绘制时得到的。

values, _, _ = np.histogram2d(x,y, bins=bins, weights=weights)
print(values.T)

请注意.T的转置;这就是句子“ x的值沿第一维直方图,y的值沿第二维直方图”。想告诉你。

plt.hist2dnumpy.histogram2d的包装器,它将随后将此数组绘制为图像

h,_, _, image = plt.hist2d(x,y,bins=bins, weights=weights)
plt.colorbar(image)
plt.show()

enter image description here

其中的值以彩色编码。