Затененная область неопределенности / ошибки в matplotlib.pyplot

Я ищу способ рисовать заштрихованные области ошибок вместо панелей ошибок в Python.

Я знаю что есть matplotlib.pyplot.fill_between() с помощью которого вы можете создать обходной путь для y-ошибки, но это не включает в себя x-неопределенность.

описание проблемы

Есть идеи? К сожалению, у меня не хватило репутации, чтобы оставить комментарий.

Заранее спасибо!


редактировать

matplotlib.pyplot.fill_betweenx() приводит к чему-то вроде:

fill_between_problem1


Редактировать 2

Кроме того, я полагаю, что это неправильно для области полной неопределенности. Ниже я рисую то, что считаю правильной формой - надеюсь, я здесь не ошибаюсь...

problem_sketch

import numpy as np
import matplotlib.pyplot as plt

x = np.asarray([1.0, 2.0, 3.0, 4.0])
y = np.asarray([1.0, 2.3, 3.0, 4.0])
xerr = np.asarray([0.1, 0.7, 0.1, 0.1])
yerr = np.asarray([0.1, 0.9, 1.2, 0.1])

plt.errorbar(x, y, yerr, xerr)

plt.fill_between(x, y-yerr, y+yerr, facecolor='#F0F8FF', alpha=1.0, edgecolor='none')
plt.fill_betweenx(y,x-xerr, x+xerr, facecolor='#F0F8FF', alpha=1.0, edgecolor='#8F94CC', linewidth=1, linestyle='dashed')

plt.show()
# Red lines added with inkscape.

1 ответ

Я получил это, чтобы работать с fill_betweenx функция:

import numpy as np
import matplotlib.pyplot as plt

x = np.asarray([1.0, 2.0, 3.0, 4.0, 5.0])
y = np.asarray([1.0, 2.0, 3.0, 4.0, 5.0])
xerr = np.asarray([0.2, 0.4, 0.6, 0.8, 1.0])
yerr = np.asarray([0.1, 0.2, 0.3, 0.4, 0.5])

plt.errorbar(x, y, yerr, xerr)

plt.fill_between(x, y-yerr, y+yerr,facecolor='r',alpha=0.5)
plt.fill_betweenx(y,x-xerr,x+xerr,facecolor='b',alpha=0.5)

plt.show()  

Что приводит к этому сюжету:

fill_between, fill_betweenx


РЕДАКТИРОВАТЬ

В вашем конкретном примере может быть достаточно использовать:

plt.fill_between(x, y-yerr, y+yerr,facecolor='#F0F8FF',alpha=1.0,edgecolor='none')
plt.fill_betweenx(y,x-xerr, x+xerr,facecolor='#F0F8FF',alpha=1.0,edgecolor='none')

Таким образом, у вас не будет ребер, которые бы пересеклись и дали бы этот "сгиб". Кроме того, это может создать достаточную иллюзию одной полосы ошибок. Вы должны использовать оба fill_between а также fill_betweenx, хоть.

Другие вопросы по тегам