使用不同的权重创建堆叠的2D直方图

时间:2013-06-21 13:50:15

标签: python numpy histogram

假设我想建立粒子数据的直方图,这些数据在某个bin范围内被平滑,nb​​in。现在我有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的粒子质量?

1 个答案:

答案 0 :(得分:4)

weights参数需要一个与xy长度相同的数组。 np.histogram2d。它不会广播一个常量值,所以即使每次调用np.histogram2d的质量相同,你仍然必须使用类似

的内容
weights=np.ones_like(x)*mass

现在,如果您使用bin=nbin,可能遇到的一个问题是,bin边缘xedgesyedges可能会根据x和{的值而发生变化{1}}您传递给y。如果您天真地将热图添加到一起,最终结果将在错误的位置累积粒子密度。

因此,如果您想多次调用np.histogram2d并将部分热图添加到一起,则必须事先确定您希望bin边缘的位置。

例如:

np.histogram2d

产量

enter image description here