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.histogram
并pyplot.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)
归档时间: |
|
查看次数: |
49128 次 |
最近记录: |