matplotlib中是否有一个简单的命令,让我在一定范围内对直方图进行积分?如果我用以下方式绘制直方图:fig =plt.hist(x,bins)然后,是否存在诸如fig.integral(bin1,bin2)之类的命令?那会把直方图的积分从bin1返回到bin2吗?
首先,请记住,积分只是曲线下方的总面积。对于直方图,积分(在伪python中)为sum([bin_width[i] * bin_height[i] for i in bin_indexes_to_integrate])。
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成三个部分,n,bins,和patches。我们可以使用这种分离来实现您要求的“积分”。
plt.histogram
n
bins
patches
假设bin1和bin2是要积分的仓位的索引,然后像这样计算积分:
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])
如果您已定义bins为具有多个宽度的列表,则必须执行类似@cphlewis所说的操作(此方法不带任何偏移):
integral = sum(np.diff(bins[bin1:bin2])*n[bin1:bin2])
还值得看看matplotlib.pyplot.hist的API文档。