В matplotlib, как мне построить ошибку как заштрихованную область, а не ошибки?
Например:
http://qhwiki.originlab.com/~originla/howto/images/c/cc/Error_Bars_with_Fill_Area_01.png
Вместо
В matplotlib, как мне построить ошибку как заштрихованную область, а не ошибки?
Например:
http://qhwiki.originlab.com/~originla/howto/images/c/cc/Error_Bars_with_Fill_Area_01.png
Вместо
Игнорируя гладкую интерполяцию между точками вашего графа примера (для чего требуется выполнить некоторую ручную интерполяцию или просто иметь более высокое разрешение ваших данных), вы можете использовать pylab.fill_between()
:
from matplotlib import pyplot as pl
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)
pl.plot(x, y, 'k-')
pl.fill_between(x, y-error, y+error)
pl.show()
См. также примеры matplotlib.
Это в основном тот же самый ответ, предоставленный Evert, но расширенный для показа
некоторые интересные варианты fill_between
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()