直方图输出不匹配输入

时间:2014-07-03 20:09:49

标签: python numpy matplotlib histogram

使用matplotlib,我正在尝试从值列表中生成直方图。我的输出看起来像这里显示的链接中的图像:http://i.stack.imgur.com/4bedX.png但我知道我的列表中没有任何值具有高于200的任何值,但x轴似乎更高。

我将这些值加载到一个列表中,在图形制作功能中,我打印了列表以便检查并且它具有正确的值。这就是我的代码。我已经预定义了yax,并将其加载到numpy数组中。

     myarray = np.asarray(yax)
     plt.hist(myarray, bins=100, histtype='stepfilled')
     plt.xlabel("Bins")
     plt.ylabel("Frequency")
     plt.ylim(0,10)

我的值列表看起来像这样(除了更大):

[38, 45, 43, 36, 35, 32, 31, 32, 31, 35, 38, 35, 33, 33, 36, 36, 35, 36, 39, 41, 38, 37, 39, 39, 38, 35, 34, 35, 38, 42, 37, 37, 34, 34, 29, 30, 37, 33, 31, 32, 35, 36, 41, 46, 44, 46, 42, 38, 41, 40, 38]

以下是我正在尝试运行该程序的实际列表:http://pastebin.com/U1u6SPsA

1 个答案:

答案 0 :(得分:0)

直方图是正确的。假设您提供的完整数组定义为“yax”,

import matplotlib.pyplot as plt; import numpy as np
myarray = np.asarray(yax)
plt.hist(myarray, bins=100, histtype='stepfilled')
plt.xlabel("Bins")
plt.ylabel("Frequency")
plt.ylim(0,10)
plt.show() # produces the exact histogram you provided at http://i.stack.imgur.com/4bedX.png

len([x for x in yax if x >= 200])
>>> 102
len([x for x in yax if x >= 1000])
>>> 37
len([x for x in yax if x >= 6000])
>>> 13
len([x for x in yax if x >= 7000])
>>> 3 # matches the height of the histogram for the bin @ 7000

经验教训是视觉检查还不够 - 不要对数据集的构成做出假设。