Matplotlib条形图条形重叠

Ben*_*enT 3 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')
Run Code Online (Sandbox Code Playgroud)

Rut*_*ies 7

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

其次,使用edge(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)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明