24

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

4

2 回答 2

26

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

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 的参数。该方法将填充指定-valuesy1和之间的区域。y2x

您没有在 x 轴下方得到任何填充的原因是因为您已指定该fill_between方法应填充 和 之间的区域y1=0y2=0没有区域。为确保填充不仅出现在显式x 值上,请指定该方法应进行插值y1以找到与 的交集y2,这是通过interpolate=True在方法调用中指定来完成的。

于 2013-06-04T12:58:57.233 回答
2

尝试设置关键字interpolate=True

于 2013-06-04T12:58:37.993 回答