在matplotlib线图上方/下方填充

时间:2013-06-04 12:30:53

标签: python matplotlib

我正在使用matplotlib创建一个简单的线条图。我的情节是一个简单的时间序列数据集,其中我有时间沿着x轴和我在y轴上测量的东西的值。 y值可以有正值或负值,如果y值>>我想用蓝色填充我的线上方和下方的区域。如果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轴的区域变为红色?谢谢你的帮助。

2 个答案:

答案 0 :(得分:19)

您提供的代码段应更正如下:

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方法至少需要两个参数xy1,同时它还有一个参数y2,其默认值为0.该方法将填充两者之间的区域指定y1 - 值的y2x

你没有在x轴下面得到任何填充的原因是你指定fill_between方法填充y1=0和{{1之间的区域这一事实},即没有区域。要确保填充不仅出现在显式 x值上,请指定该方法应插入y2=0以找到与y1的交点,这是通过在方法调用中指定y2

答案 1 :(得分:2)

尝试设置关键字interpolate=True