Python:发生的频率

use*_*r40 17 python matplotlib

我有整数列表,想要得到每个整数的频率.这在这里讨论

问题是当我的数据集只包含整数时,我正在使用的方法给出了浮点数的频率.为什么会发生这种情况以及如何从数据中获取整数频率?

我正在使用pyplot.histogram来绘制出现频率的直方图

import numpy as np
import matplotlib.pyplot as plt
from numpy import *
data = loadtxt('data.txt',dtype=int,usecols=(4,)) #loading 5th column of csv file into array named data. 
plt.hist(data) #plotting the column as histogram 
Run Code Online (Sandbox Code Playgroud)

我得到直方图,但我注意到如果我"打印"hist(数据)

hist=np.histogram(data)
print hist(data)
Run Code Online (Sandbox Code Playgroud)

我明白了:

(array([ 2323, 16338,  1587,   212,    26,    14,     3,     2,     2,     2]), 
array([  1. ,   2.8,   4.6,   6.4,   8.2,  10. ,  11.8,  13.6,  15.4,
    17.2,  19. ]))
Run Code Online (Sandbox Code Playgroud)

其中第二个数组表示值,第一个数组表示出现次数.

在我的数据集中,所有值都是整数,第二个数组如何发生浮动数字以及如何获得整数频率?

更新:

这解决了问题,谢谢Lev的回复.

plt.hist(data, bins=np.arange(data.min(), data.max()+1))
Run Code Online (Sandbox Code Playgroud)

为了避免创建一个新问题,我如何为每个整数绘制"中间"列?比如说,我希望整数3的列占用2.5到3.5之间的空间而不是3到4之间的空间.

直方图

Lev*_*sky 16

如果不指定要使用的垃圾箱,np.histogrampyplot.hist会使用默认设置,这是用10个相等的垃圾箱.第一个bin的左边界是最小值,最后一个bin的右边界是最大值.

这就是bin边框是浮点数的原因.您可以使用bins关键字参数来强制执行另一个二进制选择,例如:

plt.hist(data, bins=np.arange(data.min(), data.max()+1))
Run Code Online (Sandbox Code Playgroud)

编辑:将所有垃圾箱向左移动的最简单方法可能是从所有垃圾箱边框中减去0.5:

plt.hist(data, bins=np.arange(data.min(), data.max()+1)-0.5)
Run Code Online (Sandbox Code Playgroud)

实现相同效果的另一种方法(如果存在非整数,则不等效):

plt.hist(data, bins=np.arange(data.min(), data.max()+1), align='left')
Run Code Online (Sandbox Code Playgroud)