如何在Matplotlib条形图中消除宽度不相等的条之间的间隙

时间:2019-06-17 18:34:58

标签: python matplotlib

我正在尝试在matplotlib(或另一个python绘图库)中创建一个按顺序排序的供应曲线条形图。

每个条形图的宽度表示观测值的大小(在本例中为安装的屋顶太阳能),y轴表示成本,X轴表示在或时所有观测值的累计大小。低于特定费用。这将创建一个看起来像这样的供应曲线:

enter image description here

请注意,每个小节的宽度都不相同,并且对观察结果进行了排序,以使任何小节都不会短于其左边的任何小节。

这样的功能是否存在于任何绘图程序包中,还是我应该编写一个脚本来根据每一侧的条形宽度动态计算每个条形的必要位置?

1 个答案:

答案 0 :(得分:0)

这是我综合考虑的一个快速解决方案,尽管我觉得matplotlib中可能存在一个gaps=0选项,但我找不到该选项的文档。

fig, ax = plt.subplots()

cost = [1, 1.5, 2, 3, 4]
width = [1.0, 5.0, 10.0, 15.0, 10.0]
y_pos = [1,2,3,4,5]
colors = ['red','blue','green','red','blue']
bars = ['A','B','C','D','E']

relative_positions = []
relative_position = 0
previous_width = 0
for w in width:
    print(w, w/2)
    relative_position = float(relative_position + (previous_width/2) + (w/2))
    print(w, relative_position)
    previous_width = w
    relative_positions.append(relative_position)


plt.bar(relative_positions, cost, width=width, color=colors)
plt.xticks(relative_positions, bars)

enter image description here