假设我想建立粒子数据的直方图,这些数据在某个bin范围内被平滑,nbin。现在我有5个不同质量粒子的数据集(每组x,y具有不同的质量)。通常,粒子位置的直方图是一个简单的例子(使用numpy):
heatmap, xedges, yedges = np.histogram2d(x, y, bins=nbin)
extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]]
heatmap = np.flipud(np.rot90(heatmap))
ax.imshow(heatmap, extent=extent)
但是,如果我想添加下一批粒子,它们会有不同的质量,因此密度会有所不同。有没有办法通过某个常数对直方图进行加权,使得绘制的热图将是密度的真实表示,而不仅仅是粒子总数的分级?
我知道'权重'是一个特征,但只是设置权重= m_i,其中m_i是每个数据集1-5的粒子质量?
答案 0 :(得分:4)
weights
参数需要一个与x
和y
长度相同的数组。 np.histogram2d
。它不会广播一个常量值,所以即使每次调用np.histogram2d
的质量相同,你仍然必须使用类似
weights=np.ones_like(x)*mass
现在,如果您使用bin=nbin
,可能遇到的一个问题是,bin边缘xedges
,yedges
可能会根据x
和{的值而发生变化{1}}您传递给y
。如果您天真地将热图添加到一起,最终结果将在错误的位置累积粒子密度。
因此,如果您想多次调用np.histogram2d
并将部分热图添加到一起,则必须事先确定您希望bin边缘的位置。
例如:
np.histogram2d
产量