Позначте yerr / xerr як затінену область, а не рядки помилок


142

У matplotlib, як я будувати помилку як затінену область, а не бари помилок?

Наприклад:

введіть тут опис зображення

а не

введіть тут опис зображення


1
Як генерувався верхній сюжет?
MichaelSB

Відповіді:


151

Ігноруючи плавну інтерполяцію між точками у вашому прикладі графіка (це вимагатиме зробити ручну інтерполяцію або просто мати більш високу роздільну здатність ваших даних), ви можете використовувати 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()

введіть тут опис зображення

Дивіться також приклади matplotlib .


1
Ідеально. Так, я не хотів включати приклад із згладженими лініями.
Остін Річардсон

Будь-яка ідея, як зробити це шоу заштрихованими коробками замість затіненої смуги? Першим моїм інстинктом було зловживання, lwале, здається, він не використовував ті самі одиниці, що й оси.
Бенджамін Баньє

@BenjaminBannier Я не повністю впевнений, що ти маєш на увазі. Це звучить так, ніби ви хочете, щоб поле, намальоване у кожній точці, його висота була такою ж, як у рядку помилок, тоді як ширина повинна бути такою, щоб вони з'єднували (торкалися) сусідніх полів. Це правильно?

1
@EL_DON Ви хочете сказати, що вам хотілося б легенди з чорною лінією + синьою смугою, а текст був би на кшталт "область даних про помилку сигми" 1

1
@Allan, якщо єдині панелі помилок у вас є горизонтальними, ви, ймовірно, повинні перевернути осі вашої реальної проблеми (а отже, і фігури). Зазвичай незалежна змінна - це та без (або з дуже маленькими) смугами помилок. Можливо, вам вдасться обдурити, помінявши свої змінні даних, а в matplotlib поміняйте також осі.

131

Це в основному та сама відповідь, яку надає Еверт , але поширюється на демонстрацію деяких крутих варіантів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()

1
Трохи краще рішення: stackoverflow.com/questions/43064524 / ...
Shital Шах
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.