Заполнение выше/ниже линии линии 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
.