Matplotlib条形图重叠的酒吧

时间:2015-09-28 03:00:04

标签: python matplotlib

所以我创建了一个条形图但是我遇到了重叠条的问题。我认为问题在于边缘重叠,但是当我改变edges='none'时,条形图非常渺茫。

我确信我的数学是正确的,假设宽度为.3的3个条应该沿着x轴移动.3并且在每组条之间留下.1间隙。 (注意x增加1)

我不明白为什么这些栏最终会重叠,而且重叠似乎会在图表的末尾附近变得更糟。

ax = plt.subplot(111)
ax2 = ax.twinx()
ax.bar(x,EWtot,width=.3, color='b', align='center',label='Eyewall',edgecolor='b')
ax.bar(x + 0.3,ICtot,width=.3, color='g', align='center',label='Inner Core',edgecolor='g')
ax.bar(x + 0.6,RBtot,width=.3, color='r', align='center',label='RainBand',edgecolor='r')

1 个答案:

答案 0 :(得分:4)

我认为它是两个因素的结合。首先,您可以通过提供一些额外的数字或将它们指定为分数来稍微提高宽度和x位置的精度。

其次,边缘(linewidth > 0)的使用使得条形图默认重叠一点,边缘居中,因此边缘的一半在条形图内部,另一半在外部。完全禁用边缘可以防止任何重叠。

增加线宽并设置alpha可能会帮助您确定正在发生的事情。

以下示例说明了这一点:

n = 10
x = np.arange(n)
a = np.random.rand(n)
b = np.random.rand(n)
c = np.random.rand(n)

fig, axs = plt.subplots(2,1,figsize=(10,8))

axs[0].bar(x, a, width=0.3, facecolor='b', edgecolor='b', linewidth=3, alpha=.5)
axs[0].bar(x+0.3, b, width=0.3, facecolor='r', edgecolor='r', linewidth=3, alpha=.5)
axs[0].bar(x+0.6, c, width=0.3, facecolor='g', edgecolor='g', linewidth=3, alpha=.5)

axs[1].bar(x, a, width=1/3, facecolor='b', alpha=.5, linewidth=0)
axs[1].bar(x+1/3, b, width=1/3, facecolor='r', alpha=.5, linewidth=0)
axs[1].bar(x+2/3, c, width=1/3, facecolor='g', alpha=.5, linewidth=0)

enter image description here