我不确定这是一个错误,还是我只是误解了matplotlib累积直方图的输出。例如,我期望的是"在某个x值,相应的y值告诉我有多少样本< = x。"
import matplotlib.pyplot as plt
X = [1.1, 3.1, 2.1, 3.9]
n, bins, patches = plt.hist(X, normed=False, histtype='step', cumulative=True)
plt.ylim([0, 5])
plt.grid()
plt.show()
请参阅x=1.9
处的第2条垂直线?鉴于X
中的数据,它不应该是2.1吗?例如,在x = 3时,我将阅读&#34; 3个样本具有值x <= 3.1&#34; ...
所以,基本上我所期望的是类似于这个步骤图。
plt.step(sorted(X), range(1, len(X)+1), where='post')
plt.ylim([0, 5])
plt.grid()
我正在使用python 3.4.3&amp; matplotlib 1.4.3
答案 0 :(得分:3)
如果您未自行设置the bins
parameter,plt.hist
将为您选择(默认情况下为10)二进制文件:
In [58]: n, bins, patches = plt.hist(X, normed=False, histtype='step', cumulative=True)
In [59]: bins
Out[59]:
array([ 1.1 , 1.38, 1.66, 1.94, 2.22, 2.5 , 2.78, 3.06, 3.34,
3.62, 3.9 ])
返回值bins
显示matplotlib选择的bin的边缘。
听起来您希望X中的值充当bin边缘。运用
bins=sorted(X)+[np.inf]
:
import numpy as np
import matplotlib.pyplot as plt
X = [1.1, 3.1, 2.1, 3.9]
bins = sorted(X) + [np.inf]
n, bins, patches = plt.hist(X, normed=False, histtype='step', cumulative=True,
bins=bins)
plt.ylim([0, 5])
plt.grid()
plt.show()
产量
[np.inf]
使最终bin的右边缘延伸到无穷大。 Matplotlib很聪明,不会尝试绘制非有限值,所以你看到的就是最后一个bin的左边缘。