在python中集成直方图?

在python中集成直方图?,python,matplotlib,plot,integral,Python,Matplotlib,Plot,Integral,matplotlib中有没有一个简单的命令,让我们在一定范围内对直方图进行积分?如果我用以下公式绘制直方图: 图=plt.hist(x个箱子) 那么,是否有一个类似于fig.integral(bin1,bin2)的命令?这将返回直方图从bin1到bin2的积分?首先,记住积分只是曲线下方的总面积。在柱状图的情况下,积分(在伪python中)是sum([bin_width[i]*bin_height[i]表示bin_索引中的i到\ u integrate]) 作为参考,请参见以下在matplotl

matplotlib中有没有一个简单的命令,让我们在一定范围内对直方图进行积分?如果我用以下公式绘制直方图: 图=plt.hist(x个箱子)
那么,是否有一个类似于fig.integral(bin1,bin2)的命令?这将返回直方图从bin1到bin2的积分?

首先,记住积分只是曲线下方的总面积。在柱状图的情况下,积分(在伪python中)是
sum([bin_width[i]*bin_height[i]表示bin_索引中的i到\ u integrate])

作为参考,请参见以下在matplotlib中使用直方图的示例:

在这里,它们将
plt.直方图的输出分为三个部分,
n
bin
,和
补丁
。我们可以使用这种分离来实现您这样要求的“积分”

假设
bin1
bin2
是要积分的箱子的索引,然后计算积分,如下所示:

# 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])
如果您已将
bin
定义为一个具有多个宽度的列表,则必须执行@cphlewis所说的操作(此操作不需要一个):


还值得一看。

命令
plt.hist
返回制作一个文件所需的所有数据。如果
out=plt.hist(…)
,则料仓高度为
out[0]
,料仓宽度为
diff(out[1])
。例如:

sum(out[0][4:7]*diff(out[1][4:8]))

用于4-6号料仓(含)上的积分
diff
计算每个箱子的宽度,因此它处理不同宽度的箱子,乘法按元素进行,因此计算直方图中每个矩形的面积

我想这只适用于相邻的垃圾箱?(特别是因为它们不必都具有相同的宽度?)OP表示,他们希望从bin1和bin2中获取积分。我假设
bins
是一个整数,但是如果它是一个宽度不同的列表,那么这就不起作用了。我不清楚bin1和bin2是相邻的,就像
bins[1]
和bins[2]`应该是,或者只是参数名1和2@杰斯,如果积分超过一段距离或超过不规则的箱子,要小心。我必须稍微修改公式,以避免一次过一次的错误。这对我很有用:
integral=sum(np.diff(bins[bin1:bin2+1])*n[bin1:bin2])
你真的应该提供一个最小的例子,让我们知道你的变量是什么。具体来说,什么是
垃圾箱
?如果它是一个整数,那么你可以使用我的答案,但如果不是,你需要一些更灵活的东西,比如cphlewis发布的
hist
现在有一个
cumulative
关键字来绘制累积值。不确定您想要的是数值还是绘图。
sum(out[0][4:7]*diff(out[1][4:8]))