Relleno por encima / por debajo de la línea de matplotlib

Estoy usando matplotlib para crear un gráfico de líneas simple. Mi gráfico es un conjunto de datos de series de tiempo simple donde tengo tiempo a lo largo del eje x y el valor de algo que estoy midiendo en el eje y. Los valores de y pueden tener valores positivos o negativos y me gustaría rellenar el área arriba y debajo de mi línea con el color azul si el valor de y es> 0 y el rojo si los valores de y es <0. Aquí está mi gráfica:

Como puede ver, puedo obtener el color azul para rellenar correctamente, pero no puedo obtener el color rojo para rellenar correctamente. Aquí está el código básico que estoy usando:

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')

¿Cómo puedo hacer que el área de un valor de y positivo al eje x sea azul y el área de un valor de y negativo al eje x para ser rojo? Gracias por la ayuda.

Respuestas a la pregunta(2)

Su respuesta a la pregunta