该参数需要一个与和weights
长度相同的数组。. 它不会广播一个常数值,所以即使每次调用的质量相同,你仍然必须使用类似的东西x
y
np.histogram2d
np.histogram2d
weights=np.ones_like(x)*mass
现在,如果使用,您可能会遇到的一个问题bin=nbin
是 bin 边缘 ,xedges
可能yedges
会根据您传递给的x
和的值而改变。如果您天真地将热图添加在一起,最终结果将在错误的位置累积粒子密度。y
np.histogram2d
因此,如果您想np.histogram2d
多次调用并将部分热图添加在一起,则必须提前确定您想要 bin 边缘的位置。
例如:
import numpy as np
import itertools as IT
import matplotlib.pyplot as plt
N = 50
nbin = 10
xs = [np.array([i,i,i+1,i+1]) for i in range(N)]
ys = [np.array([i,i+1,i,i+1]) for i in range(N)]
masses = np.arange(N)
heatmap = 0
xedges = np.linspace(0, N, nbin)
yedges = np.linspace(0, N, nbin)
for x, y, mass in IT.izip(xs, ys, masses):
hist, xedges, yedges = np.histogram2d(
x, y, bins=[xedges, yedges], weights=np.ones_like(x)*mass)
heatmap += hist
extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]]
heatmap = np.flipud(np.rot90(heatmap))
fig, ax = plt.subplots()
ax.imshow(heatmap, extent=extent, interpolation='nearest')
plt.show()
产量