累积直方图的最后一点在y = 0

时间:2012-05-21 17:51:03

标签: matplotlib histogram

我正在用

创建直方图
pylab.hist(data,weights,histtype='step',normed=False,bins=150,cumulative=True)

获得(还有其他情节,现在无关紧要)紫罗兰色线

histogram

为什么直方图最后会再次降为零?累积函数通常应该是非递减的。有没有办法解决这个问题,无论是错误还是功能?

编辑:解决方案(黑客):

# histtype=step returns a single patch, open polygon
n,bins,patches=pylab.hist(data,weights,histtype='step',cumulative=True)
# just delete the last point
patches[0].set_xy(patches[0].get_xy()[:-1])

2 个答案:

答案 0 :(得分:0)

这是默认行为。可以将其视为条形图的直方图轮廓。至于快速解决方法,而不是我所知道的。解决方案是自己计算直方图:python histogram one-liner

答案 1 :(得分:0)

如果你不喜欢OP的简单解决方案,这里是一个过于复杂的解决方案,我们手工构建情节。如果您只能访问直方图计数并且无法使用matplotlib的hist函数,那么它可能很有用。

import numpy as np
import matplotlib.pyplot as plt

data = np.random.randn(5000)
counts, bins = np.histogram(data, bins=20)
cdf = np.cumsum(counts)/np.sum(counts)

plt.plot(
    np.vstack((bins, np.roll(bins, -1))).T.flatten()[:-2],
    np.vstack((cdf, cdf)).T.flatten()
)
plt.show()

output