我正在使用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]
我也尝试过使用宽度参数,但在这种情况下条形似乎重叠,直方图中不会发生。
import matplotlib.pyplot as plt
plt.bar(maxlist, mean,width = 6)
plt.show()
我想要的是条形图看起来像直方图,如下所示,没有任何重叠。有任何想法的人如何在python / ipython笔记本中这样做。
答案 0 :(得分:3)
来自@ roadrunner66链接的文档,
matplotlib.pyplot.bar(left, height, width=0.8, bottom=None, hold=None, data=None, **kwargs)
制作一个带有矩形的条形图:
left
,left + width
,bottom
,bottom + 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()
条形宽度代表左右边缘之间的距离x1
和x2
。如果您想要恒定宽度,只需将width=w_scalar
传递给plt.bar()
,其中w_scalar
是您的恒定宽度。如果您希望条形物更远,只需将width
缩小。