我正在使用matplotlib创建一个简单的线条图。我的情节是一个简单的时间序列数据集,其中我有时间沿着x轴和我在y轴上测量的东西的值。 y值可以有正值或负值,如果y值>>我想用蓝色填充我的线上方和下方的区域。如果y值是< 0则为红色;这是我的情节:
正如您所看到的,我可以正确填写蓝色,但我无法正确填写红色。这是我使用的基本代码:
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轴的区域变为红色?谢谢你的帮助。
答案 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
方法至少需要两个参数x
和y1
,同时它还有一个参数y2
,其默认值为0.该方法将填充两者之间的区域指定y1
- 值的y2
和x
。
你没有在x轴下面得到任何填充的原因是你指定fill_between
方法填充y1=0
和{{1之间的区域这一事实},即没有区域。要确保填充不仅出现在显式 x值上,请指定该方法应插入y2=0
以找到与y1
的交点,这是通过在方法调用中指定y2
。
答案 1 :(得分:2)
尝试设置关键字interpolate=True
。