python中的手动直方图

时间:2016-03-24 02:08:43

标签: python numpy pandas matplotlib histogram

我正在使用matplotlib制作直方图。

基本上,我想知道是否有任何方法可以手动设置垃圾箱以及它们的值,仍然可以得到结果,好像图形是我的matplotlin直方图。下面是我的箱子及其相应的价值。

0-7     0.9375
7-13    0.9490740741
13-18   0.8285714286 
18-28   0.880952381
28-37   0.92164903
37-48   0.9345357019
48-112  0.9400368773

这是我实施的条形码

import matplotlib.pyplot as plt
plt.bar(maxlist, mean)
plt.show()

maxlist = [7.0, 13.0, 18.0, 28.0, 37.0, 48.0, 112.0]
mean = [0.9375, 0.94907407407777766, 0.82857142858571442, 0.88095238094999995, 0.92164902996666676, 0.93453570191250002, 0.94003687729000018]

这就是上面代码的条形图。 histwithoutwidth

我也尝试过使用宽度参数,但在这种情况下条形似乎重叠,直方图中不会发生。

import matplotlib.pyplot as plt
plt.bar(maxlist, mean,width = 6)
plt.show()

enter image description here

我想要的是条形图看起来像直方图,如下所示,没有任何重叠。有任何想法的人如何在python / ipython笔记本中这样做。 enter image description here

1 个答案:

答案 0 :(得分:3)

来自@ roadrunner66链接的文档,

  

matplotlib.pyplot.bar(left, height, width=0.8, bottom=None, hold=None, data=None, **kwargs)

     

制作一个带有矩形的条形图:

     

leftleft + widthbottombottom + height

     

(左,右,下和上边缘)

传递给bar的第一个参数实际上是" bin的左边缘。"似乎maxlist,你left传递的实际上是你的垃圾箱的右边缘,它会把一切都扔掉并导致你的宽度变得奇怪。

import matplotlib.pyplot as plt
import numpy as np
x1=[0,7,13,18,28,37,48] #left edge
x2=x1[1::]+[112] #right edge
y=[0.9375, 0.94907407407777766, 0.82857142858571442, 0.88095238094999995, 0.92164902996666676, 0.93453570191250002, 0.94003687729000018]
w=np.array(x2)-np.array(x1) #variable width, can set this as a scalar also
plt.plot(x1,y,width=w)
plt.show()

Bar chart with variable bin widths

条形宽度代表左右边缘之间的距离x1x2。如果您想要恒定宽度,只需将width=w_scalar传递给plt.bar(),其中w_scalar是您的恒定宽度。如果您希望条形物更远,只需将width缩小。