在python中集成直方图?
matplotlib中有没有一个简单的命令,让我们在一定范围内对直方图进行积分?如果我用以下公式绘制直方图: 图=plt.hist(x个箱子)在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
那么,是否有一个类似于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]))