如何在Python的matplotlib中绘制数字数组的经验CDF?我正在寻找pylab的“hist”函数的cdf模拟。
我能想到的一件事是:
from scipy.stats import cumfreq
a = array([...]) # my array of numbers
num_bins = 20
b = cumfreq(a, num_bins)
plt.plot(b)
那是正确的吗?有没有更简单/更好的方法?
谢谢。
最佳答案
看起来(几乎)完全是您想要的。两件事情:
首先,结果是四个项目的元组。第三个是垃圾箱的大小。第二个是最小垃圾箱的起点。第一个是每个垃圾箱中或下方的点数。 (最后是超出限制的点数,但是由于您未设置任何点数,因此将对所有点进行分箱。)
其次,您需要调整结果的比例,使最终值为1,以遵循CDF的常规约定,但否则是正确的。
这是它的内幕:
def cumfreq(a, numbins=10, defaultreallimits=None):
# docstring omitted
h,l,b,e = histogram(a,numbins,defaultreallimits)
cumhist = np.cumsum(h*1, axis=0)
return cumhist,l,b,e
它进行直方图处理,然后在每个仓中生成计数的累积和。因此,结果的第i个值是小于或等于第i个bin的最大值的数组值的数量。因此,最终值只是初始数组的大小。
最后,要进行绘制,您需要使用bin的初始值和bin大小来确定所需的x轴值。
另一种选择是使用
numpy.histogram
可以进行规范化并返回bin边缘。您需要自己对结果计数进行累加。a = array([...]) # your array of numbers
num_bins = 20
counts, bin_edges = numpy.histogram(a, bins=num_bins, normed=True)
cdf = numpy.cumsum(counts)
pylab.plot(bin_edges[1:], cdf)
(
bin_edges[1:]
是每个bin的上边缘。)关于python - 如何在Python的matplotlib中绘制经验CDF?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3209362/