在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提出的问题(不是我的)。
答案 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()
现在我们可以用裸眼直方图:
在bin x = 1..2,y = 0..1 中,您只有一点。该点的权重为0.6
,因此该bin的值为0.6
。
在bin x = 2..3,y = 1..2 中,您有两个点。它们的权重为1
和2
。因此,该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.hist2d
是numpy.histogram2d
的包装器,它将随后将此数组绘制为图像
h,_, _, image = plt.hist2d(x,y,bins=bins, weights=weights)
plt.colorbar(image)
plt.show()
其中的值以彩色编码。