0

我在数组 x、y 和 w 中有数据,其中“x”和“y”表示位置,“w”是 1 或 0 的权重,表示成功或失败。我正在尝试创建一个 2d 直方图,其中直方图的每个 bin 根据该 bin 中的成功百分比(即 bin 中的成功数除以 bin 中的总点数)进行着色。我已经玩了很多 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()
4

1 回答 1

3

我很确定这可行,但是您不提供数据,因此很难检查。normed=True给你密度,如果你不通过normed=True,你会得到加权样本计数,所以如果你将加权版本(实际上只是每个 bin #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在最终的直方图中,因此您可能希望针对这些情况做出决定。

于 2013-04-27T10:43:11.357 回答