将 yerr/xerr 绘制为阴影区域而不是错误条

在 matplotlib 中,如何将错误绘制为阴影区域而不是错误条?

例如:

enter image description here

而不是

enter image description here

167930 次浏览

忽略示例图中点之间的平滑插值(这需要进行一些手动插值,或者只是需要更高的数据分辨率) ,您可以使用 pyplot.fill_between():

from matplotlib import pyplot as plt
import numpy as np


x = np.linspace(0, 30, 30)
y = np.sin(x/6*np.pi)
error = np.random.normal(0.1, 0.02, size=y.shape)
y += np.random.normal(0, 0.1, size=y.shape)


plt.plot(x, y, 'k-')
plt.fill_between(x, y-error, y+error)
plt.show()

enter image description here

参见 Matplotlib 示例

这基本上是 埃弗特也给出了同样的答案,但扩展到炫耀 fill_between的一些很酷的选择

enter image description here

from matplotlib import pyplot as pl
import numpy as np


pl.clf()
pl.hold(1)


x = np.linspace(0, 30, 100)
y = np.sin(x) * 0.5
pl.plot(x, y, '-k')




x = np.linspace(0, 30, 30)
y = np.sin(x/6*np.pi)
error = np.random.normal(0.1, 0.02, size=y.shape) +.1
y += np.random.normal(0, 0.1, size=y.shape)


pl.plot(x, y, 'k', color='#CC4F1B')
pl.fill_between(x, y-error, y+error,
alpha=0.5, edgecolor='#CC4F1B', facecolor='#FF9848')


y = np.cos(x/6*np.pi)
error = np.random.rand(len(y)) * 0.5
y += np.random.normal(0, 0.1, size=y.shape)
pl.plot(x, y, 'k', color='#1B2ACC')
pl.fill_between(x, y-error, y+error,
alpha=0.2, edgecolor='#1B2ACC', facecolor='#089FFF',
linewidth=4, linestyle='dashdot', antialiased=True)






y = np.cos(x/6*np.pi)  + np.sin(x/3*np.pi)
error = np.random.rand(len(y)) * 0.5
y += np.random.normal(0, 0.1, size=y.shape)
pl.plot(x, y, 'k', color='#3F7F4C')
pl.fill_between(x, y-error, y+error,
alpha=1, edgecolor='#3F7F4C', facecolor='#7EFF99',
linewidth=0)






pl.show()