Matplotlib:调整柱状图中误差线的层级

3
import pylab as pl
import numpy as np

x = np.arange(4)
y1, y2 = [1,2,1,1], [2,3,1,1.5]


pl.bar(x+0.2,y2, width=0.45, color='g')
pl.errorbar(x+0.4,y2,fmt=None, yerr=0.75, ecolor='r', 
            lw=2, capsize=10., mew = 3)

pl.bar(x,y1,width=0.45)
pl.errorbar(x+0.2,y1,fmt=None, yerr=0.5, ecolor='r', 
            lw=2, capsize=10., mew = 3)

pl.savefig('err.png')

生成

输入图像描述

我希望绿色值的误差条被蓝色条覆盖。

我认为调整绘图的 z-级别应该可以实现这一点(这就是我首先使用 .bar 和 .errorbar 分开的原因):

pl.bar(x+0.2,y2, width=0.45, color='g', zorder=1)
pl.errorbar(x+0.4,y2,fmt=None, yerr=0.75, ecolor='r', 
            lw=2, capsize=10., mew = 3, zorder=1)

pl.bar(x,y1,width=0.45, zorder=2)
pl.errorbar(x+0.2,y1,fmt=None, yerr=0.5, ecolor='r', 
            lw=2, capsize=10., mew = 3, zorder=2)

这个问题enter image description here让我束手无策。

我找不到一种有效的zorder组合。如何正确地调整Matplotlib条形图中误差线的z级别?

1个回答

2

我认为您需要单独设置caplines的z-order(它们是由pylab.errorbar返回的三个对象之一):

import pylab as pl
import numpy as np

x = np.arange(4)
y1, y2 = [1,2,1,1], [2,3,1,1.5]


pl.bar(x+0.2,y2, width=0.45, color='g', zorder=1)
_, caplines, _ = pl.errorbar(x+0.4,y2,fmt=None, yerr=0.75, ecolor='r', 
            lw=2, capsize=10., mew = 3, zorder=2)

pl.bar(x,y1,width=0.45, zorder=3)
pl.errorbar(x+0.2,y1,fmt=None, yerr=0.5, ecolor='r', 
            lw=2, capsize=10., mew = 3, zorder=4)

for capline in caplines:
    capline.set_zorder(2)

pl.savefig('err.png')

enter image description here


非常感谢,那个解决了问题。一个可能会感兴趣的提示:这个解决方案不适用于旧的Matplotlib 1.1.1rc版本,但在1.3.1及以上版本中可以正常工作。 - Felix Hoffmann

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