Matplotlib,在上面画图

Matplotlib, draw on top

我正在绘制一些数据点的误差线图,在这些点旁边,我想绘制两个值之间的平均值一条线,我还希望将线绘制在误差线的顶部。

在我的代码中,我写了 pyplot.errorbar(...) 先绘制数据点,然后 pyplot.plot(...) 绘制线条,结果是错误栏绘制在线条之上, 这样就很难看到这条线:

我不知道如何在上面画线,这可能真的很容易做到,但我不知道该怎么做。

一般使用zorderhttps://matplotlib.org/3.1.1/gallery/misc/zorder_demo.html

来控制
pyplot.plot([0,1], [0,1], linewidth=10)
pyplot.errorbar([0.5], [0.5], 0.3, 0.3, linewidth=20, zorder=-100)

pyplot.plot([0,1], [0,1], linewidth=10)
pyplot.errorbar([0.5], [0.5], 0.3, 0.3, linewidth=20, zorder=100)

您还可以通过设置 plt.errorbar() 中的参数 alpha 和误差条线宽 (elinewidth) 来调整透明度(或不透明度)以获得理想的效果。

带有虚拟数据的示例

import numpy as np
import matplotlib.pyplot as plt

%matplotlib inline
%config InlineBackend.figure_format = 'svg' # 'svg', 'retina'
plt.style.use('seaborn-white')

# dummy data
np.random.seed(0)
x = np.arange(-1,1,0.1)
y, yerr = 2*np.random.randn(x.size) + 5, 1*np.random.randn(x.size)
xerr = 0.2*np.random.randn(x.size)

# make figure
fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize=(16,6))
plt.sca(ax1)
plt.plot(x,y, 'bo', markersize=3)
plt.errorbar(x, y, xerr=xerr, 
            ecolor='red', elinewidth=1.2, barsabove=False, 
            alpha=0.3, lw=1)
plt.title('elinewidth = 1.2')
plt.sca(ax2)
plt.plot(x,y, 'bo', markersize=3)
plt.errorbar(x, y, xerr=xerr, 
            ecolor='red', elinewidth=2.0, barsabove=False, 
            alpha=0.3, lw=1)
plt.title('elinewidth = 2.0')
plt.suptitle('Controlling Errorbar Width and Transparency')
plt.show()

输出: