Matplotlib,在上面画图
Matplotlib, draw on top
我正在绘制一些数据点的误差线图,在这些点旁边,我想绘制两个值之间的平均值一条线,我还希望将线绘制在误差线的顶部。
在我的代码中,我写了 pyplot.errorbar(...)
先绘制数据点,然后 pyplot.plot(...)
绘制线条,结果是错误栏绘制在线条之上, 这样就很难看到这条线:
我不知道如何在上面画线,这可能真的很容易做到,但我不知道该怎么做。
一般使用zorder
https://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()
输出:
我正在绘制一些数据点的误差线图,在这些点旁边,我想绘制两个值之间的平均值一条线,我还希望将线绘制在误差线的顶部。
在我的代码中,我写了 pyplot.errorbar(...)
先绘制数据点,然后 pyplot.plot(...)
绘制线条,结果是错误栏绘制在线条之上, 这样就很难看到这条线:
我不知道如何在上面画线,这可能真的很容易做到,但我不知道该怎么做。
一般使用zorder
https://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()
输出: