在python中绘制直方图

时间:2015-02-07 03:02:45

标签: python python-2.7 numpy matplotlib

我在python中编写了以下程序来获得等宽直方图。但是当我正在绘制它时,我得到的是一行而不是直方图。有人可以帮我弄清楚我哪里出错了。

import numpy as np
import matplotlib.pyplot as plt

for num in range(0,5):
    hist, bin_edges = np.histogram([1000, 98,99992,8474,95757,958574,97363,97463,1,4,5], bins = 5)
    plt.bar(bin_edges[:-1], hist, width = 1000)
    plt.xlim(min(bin_edges), max(bin_edges))
    plt.show()   

此外,我想标记每个用" num" value..which范围从0到5.在上面给出的例子中虽然我保持我的数据不变,但我打算改变我的数据为不同的" num"值。

1 个答案:

答案 0 :(得分:1)

查看你的垃圾箱边缘:

>>> bin_edges
array([  1.00000000e+00,   1.91715600e+05,   3.83430200e+05,
         5.75144800e+05,   7.66859400e+05,   9.58574000e+05])

你的垃圾箱位置从1到大约1百万,但你只给了条宽1000.你的酒吧,它们存在的地方,太瘦,看不到。此外,大多数酒吧都有血清高度,因为大多数酒吧都是空的:

>>> hist
array([10,  0,  0,  0,  1])

" line"你看到的是最后一个bin,有一个元素。这个箱子的跨度大约为200000,但是箱子宽度只有1000,所以它相对于它应该覆盖的空间量非常薄。高度10的条也在那里,但它也非常瘦,并且在图的左边缘卡住,所以它基本上是看不见的。

尝试使用恒定宽度条,同时将它们放置在与其大小相对应的x坐标上也没有意义。通过将条形放在那些x坐标处,您已经将它们与箱宽度成比例地间隔开;使酒吧更苗条并不能使它们更紧密地联系在一起,这只会让它们看不见。

如果要使用恒定宽度条,则应将它们放在连续的X位置,并使用轴上的标签来显示分档所代表的值。以下是您的数据的简单示例:

plt.bar(np.arange(len(bin_edges)-1), hist, width=1)
plt.xticks((np.arange(len(bin_edges))-0.5)[1:], bin_edges[:-1])

enter image description here

您必须决定如何格式化这些标签。