【问题标题】:Matplotlib Bar Graph Overlapping of BarsMatplotlib 条形图重叠条形
【发布时间】:2015-12-25 05:30:03
【问题描述】:

所以我创建了一个条形图,但我遇到了重叠条形图的问题。我认为问题在于边缘重叠,但是当我更改edges='none'时,条形真的很细。

我相信我的数学是正确的,假设 3 个宽度为 0.3 的条应沿 x 轴移动 0.3 并在每组条之间留下 0.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')

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    我认为这是两个因素的结合。首先,您可以通过提供一些额外的数字或将它们指定为分数来稍微提高宽度和 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)
    

    【讨论】: