Заполнение выше/ниже линии линии matplotlib

Я использую matplotlib для создания простой строки. Мой график - это простой набор данных временного ряда, где у меня есть время вдоль оси х и значение того, что я измеряю по оси Y. y могут иметь поведенческие или отрицательные значения, и я хотел бы заполнить область выше и ниже моей линии синим цветом, если значение y > 0 и красное, если значения y равны < 0. Здесь мой сюжет:

enter image description here

Как вы можете видеть, я могу получить синий цвет, чтобы заполнить его правильно, но я не могу правильно заполнить красный цвет. Вот базовый код, который я использую:

plt.plot(x, y, marker='.', lw=1)
d = scipy.zeros(len(y))
ax.fill_between(xs,ys,where=ys>=d, color='blue')
ax.fill_between(xs,0,where=ys<=d, color='red')

Как я могу получить область от положительного значения y до оси x, чтобы она была синей, а область от отрицательного значения y до оси x была красной? Спасибо за помощь.

Ответ 1

Выведенный фрагмент кода должен быть скорректирован следующим образом:

plt.plot(x, y, marker='.', lw=1)
d = scipy.zeros(len(y))
ax.fill_between(xs, ys, where=ys>=d, interpolate=True, color='blue')
ax.fill_between(xs, ys, where=ys<=d, interpolate=True, color='red')

Метод fill_between принимает не менее двух аргументов x и y1, а также имеет параметр y2 со значением по умолчанию 0. метод будет заполнять область между y1 и y2 для указанных x -значений.

Причина, по которой вы не получили никакого заполнения ниже оси x, объясняется тем, что вы указали, что метод fill_between должен заполнить область между y1=0 и y2=0, то есть без области, Чтобы убедиться, что заполнение не отображается только при явных значениях x, укажите, что метод должен интерполировать y1, чтобы найти пересечения с y2, что делается путем указания interpolate=True в вызове метода.

Ответ 2

Попробуйте установить ключевое слово interpolate=True.