我在数组x,y和w中有数据,其中'x'和'y'表示位置,'w'是1或0的权重,表示成功或失败。我正在尝试创建一个二维直方图,其中直方图的每个二进制数基于该二进制位中的成功百分比着色(即,二进制中的成功数除以二进制位中的总点数)。我已经玩了numpy.histogram2d了很多,可以得到密度图,但这与我想要的成功方案的百分比不一样。请注意numpy.histogram2d参数中的normed = True并不能缓解这个问题。
(为了澄清差异,如果在箱子中有大量的成功,密度图表示大的'颜色值',无论同一箱中有多少故障。我希望有百分比取而代之的是,因此同一个箱子中的大量故障会产生较小的“颜色值”。我为可怜的术语道歉。
非常感谢能够提供帮助的任何人!
当前代码的示例不符合我的目标:
import matplotlib.pyplot as plt
import numpy as np
plt.figure(1)
H, xedges, yedges = np.histogram2d(x, y, bins=50, weights=w, normed=True)
extent = [yedges[0], yedges[-1], xedges[-1], xedges[0]]
plt.imshow(H, extent=extent,interpolation='nearest')
plt.colorbar()
plt.show()
答案 0 :(得分:3)
我很确定这是有效的,但你不提供数据,所以很难检查。 normed=True
为您提供密度,如果您未通过normed=True
,则会获得加权样本计数,因此,如果您将加权版本(实际上只是每箱的#successes)除以未加权(元素数量)在每个bin)中,你最终会获得%成功。
import matplotlib.pyplot as plt
import numpy as np
plt.figure(1)
H, xedges, yedges = np.histogram2d(x, y, bins=50, weights=w)
H2, _, _ = np.histogram2d(x,y, bins=50)
extent = [0,1, xedges[-1], xedges[0]]
plt.imshow(H/H2, extent=extent,interpolation='nearest')
plt.colorbar()
plt.show()
这可能会在最终的直方图中留下nan
,因此您可能希望为这些情况做出决定。