小编典典

在python中集成直方图?

python

matplotlib中是否有一个简单的命令,让我在一定范围内对直方图进行积分?如果我用以下方式绘制直方图:fig =plt.hist(x,bins)然后,是否存在诸如fig.integral(bin1,bin2)之类的命令?那会把直方图的积分从bin1返回到bin2吗?


阅读 223

收藏
2021-01-20

共1个答案

小编典典

首先,请记住,积分只是曲线下方的总面积。对于直方图,积分(在伪python中)为sum([bin_width[i] * bin_height[i] for i in bin_indexes_to_integrate])

作为参考,请参见以下在matplotlib中使用直方图的示例:http
:
//matplotlib.org/1.2.1/examples/pylab_examples/histogram_demo.html。

在这里,他们的输出分隔plt.histogram成三个部分,nbins,和patches。我们可以使用这种分离来实现您要求的“积分”。

假设bin1bin2是要积分的仓位的索引,然后像这样计算积分:

# create some dummy data to make a histogram of
import numpy as np
x = np.random.randn(1000)
nbins = 10
# use _ to assign the patches to a dummy variable since we don't need them
n, bins, _ = plt.hist(x, nbins)

# get the width of each bin
bin_width = bins[1] - bins[0]
# sum over number in each bin and mult by bin width, which can be factored out
integral = bin_width * sum(n[bin1:bin2])

如果您已定义bins为具有多个宽度的列表,则必须执行类似@cphlewis所说的操作(此方法不带任何偏移):

integral = sum(np.diff(bins[bin1:bin2])*n[bin1:bin2])

还值得看看matplotlib.pyplot.histAPI文档

2021-01-20