正负值的条形图

18

我希望负数的条形图向下,正数向上,而x轴(0线)恰好位于它们之间。我尝试了这个方法

chart = fig.bar(x, negative_data, width=35, color='r')
ax2 = plt.gca().twinx()
ax2.bar(x, positive_data, width=35, color='b')

但是,我得到的是合并的红色和白色条形图,都朝向下方。似乎数组negative_data/positive_data只指定了条形图的高度,但是如何指定方向呢?我需要某种方式来指定每个条形图顶部的坐标。

此外,我如何使宽度成为合理的东西,可能是动态的,因为用户调整了图表的大小?

这是一个有问题的宽度示例:

x = [250, 1500, 2750, 4250, 6000, 8500, 13200]
negative_data = [0, 0, 0, 0, 0, 0, 0]
positive_data = [3, 0, 0, 0, 1, 0, 0]

我该如何让这些图表看起来更美观呢?

1个回答

41

您不需要添加双轴,可以像这样将两个柱状图绘制在同一轴上:

x = range(7)
negative_data = [-1,-4,-3,-2,-6,-2,-8]
positive_data = [4,2,3,1,4,6,7,]

fig = plt.figure()
ax = plt.subplot(111)
ax.bar(x, negative_data, width=1, color='r')
ax.bar(x, positive_data, width=1, color='b')

带有正负 y 值的条形图

宽度为1的条形将填充轴并随着图形的调整而缩放。


1
你希望宽度看起来怎么样? - Molly
这听起来像是您要在图中显示的条形太多了。您可能需要使用不同类型的绘图或更大的图形。 - Molly
但它只显示了几个条形图,而且它们都只是垂直线。每个图中有7个条形图。 - Baron Yugovich
以下是有问题的数据: x = [250, 1500, 2750, 4250, 6000, 8500, 13200] negative_data = [0, 0, 0, 0, 0, 0, 0] positive_data = [3, 0, 0, 0, 1, 0, 0]如何使其看起来更好? - Baron Yugovich
有没有办法让这个更自动化?如果你不知道哪些数据相对于中线是正面或负面的呢? - jimh
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接