我正在创建直方图
pylab.hist(data,weights,histtype='step',normed=False,bins=150,cumulative=True)
得到(还有其他的图,现在不相关了)紫色线
为什么直方图在最后又降到零?累积函数通常应该是非递减的。有什么方法可以解决这个问题吗?是bug还是特性?
exdqitrt1#
如果你不喜欢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()
kg7wmglp2#
这是默认行为。可以将其视为直方图的轮廓。至于快速解决方法,我不知道。一个解决方案是自己计算直方图:python histogram one-liner
flvtvl503#
解决方案(破解):
# 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])
在CC BY-SA 3.0下,OP Zer0将该答案作为累积直方图在y=0处具有最后一个点问题的edit发布。
3条答案
按热度按时间exdqitrt1#
如果你不喜欢OP的简单解决方案,这里有一个过于复杂的解决方案,我们手工绘制图表。如果你只能访问直方图计数,而不能使用matplotlib的hist函数,它可能会很有用。
kg7wmglp2#
这是默认行为。可以将其视为直方图的轮廓。至于快速解决方法,我不知道。一个解决方案是自己计算直方图:python histogram one-liner
flvtvl503#
解决方案(破解):
在CC BY-SA 3.0下,OP Zer0将该答案作为累积直方图在y=0处具有最后一个点问题的edit发布。