matplotlib fill_between使用离散x值,其中参数产生间隙

mm9b1k5b  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(98)

我试图创建一个面积图,其中填充根据y值变化。使用fill_betweenwhere参数基本上可以工作,但留下未填充的区域:

import numpy as np
import matplotlib.pyplot as plt

x=np.arange(1,10)
y=np.array([1,4,6,8,4,7,5,6,0])

plt.plot(x, y, color='black')
plt.fill_between(x, y, where=y < 5, color='red')
plt.fill_between(x, y, where=y >= 5, color='blue')

plt.show()

Run on trinket.io
生成此结果:Plot without interpolation
怎样才能去掉图下面的任何白色区域呢?我对当前“中间”区域应该如何着色没有严格的要求。两者之一--或者两者在中点相遇--就可以了。
添加interpolate=True在某些方面稍微改善了情况,但在其他方面看起来更混乱:
我已经看过step参数,但在我看来似乎没有希望。

kmpatx3s

kmpatx3s1#

因为你的要求很简单,最好的方法是决定你的“默认”颜色,并将其用作整个曲线的fill_between,而不指定任何条件。在此之上,你可以为不同的条件添加不同的颜色。比如:

fig, ax = plt.subplots()

ax.fill_between(x, y, color="blue")
ax.fill_between(x, y, where=y<=5, color="red")

它给出了以下输出:

相关问题