首页 > 解决方案 > x 坐标大于某个值的堆叠直方图(加权)中的 bin 计数

问题描述

假设我有两个数据集,然后我绘制了两个具有一定权重的数据集的堆叠直方图。现在,我能知道大于某个数字的数据元素的总 bin 计数是多少(即 x 坐标大于某个值)。为了说明我的问题,我做了以下

import matplotlib.pyplot as plt
import numpy as np

data1 = np.random.normal(0,0.6,1000)
data2 = np.random.normal(0,1.4,1000)

weight1 = np.array([0.5]*len(data1))
weight2 = np.array([0.9]*len(data2))

hist = plt.hist((data1,data2),weights=(weight1,weight2),stacked=True,range=(-5,5))

plt.show()

在此处输入图像描述

现在,我怎么知道垃圾箱的数量,比如x大于 -2?

到目前为止,为了得到这个答案,我正在做以下事情

n1,_,_ = plt.hist((data1,data2),weights=(weight1,weight2),stacked=False,range=(-2,10000))
bin_counts=sum(sum(n1))
print(bin_counts)

在这里,我选择范围内的最大值是一个非常大的数字,这样我就可以得到所有的 bin 计数x=-2和更大的值。

还有比这更有效的方法吗?

另外,获取bin_counts变量的方法是什么x,其中x在某些步骤中从 x 坐标的最小值到 x 坐标的最大值变化?

任何帮助将不胜感激!

非常感谢!

标签: pythonpython-2.7matplotlib

解决方案


您可以执行以下操作:

#in your case n is going to be a list of arrays, because you have 2 histograms
n,bins,_ = plt.hist(...)
#get a list of lists of counts for bin values over x
n_over_x = [[val for val,bin in zip(selected_cnt, bins) if bin > x] for selected_cnt in n]
#sum up list of lists
result = sum([sum(part_list) for part_list in n_over_x])

推荐阅读