matplotlib 填充行之间的区域[重复]

pcrecxhr  于 2023-11-22  发布在  其他
关注(0)|答案(1)|浏览(151)

此问题在此处已有答案

fill between two lines lacking common x values(1个答案)
fill between multiple lines(3个答案)
How do I fill between two curves defined by two different sets of arrays?(2个答案)
How to fill between two lines with different x and y(1个答案)
21天前关闭
我想填充两个区域,第一个是由所有四个函数包围的,第二个是由f和g函数包围的。据我所知,要应用fill_between()函数,y数据应该由相同的x数据生成。我知道这个问题可以通过用相同的x数据生成函数来简化,但我想知道如何以这种方式解决这个问题(不同的x数据)。

import numpy as np
import matplotlib.pyplot as plt
x1=np.linspace(0, 3, 100)
x2=np.linspace(0.4, 2.6, 150)
x3=np.linspace(0, 1.6, 180)
x4=np.linspace(0, 3, 125)

f=np.exp(x1)
g=5*x2-1
l=-40*x3+10
t=3*x4+9
plt.plot(x1, f, label='f(x)=e^x')
plt.plot(x2, g, label='g(x)=5x-1')
plt.plot(x3, l, label='l(x)=-4x+10')
plt.plot(x4, t, label='t(x)=3x+9')
plt.legend()
plt.ylabel('y axis')
plt.xlabel('x axis')
plt.ylim(0,)
plt.show()

字符串


的数据
我尝试使用plt.fill_between()函数。

r6vfmomb

r6vfmomb1#

要使用plt.fill_between(),你的曲线需要公共的x值。在这个例子中,你可以通过重写代码来声明x1,.,x4变量来解决这个问题。

x1=np.linspace(0, 3, 3000)
x2=np.linspace(0, 3, 3000)
x3=np.linspace(0, 3, 3000)
x4=np.linspace(0, 3, 3000)

字符串
之后,您可以使用多个plt.fill_between()方法来填充该区域。

plt.fill_between(x4,t,l,where= (l>f) & (t>l), alpha=0.3, color="C0")
plt.fill_between(x4,t,f,where= (t>f) & (l<f) & (f>g), alpha=0.3, color="C0")
plt.fill_between(x4,t,g,where= (t>g) & (f<g), alpha=0.3, color="C0")

不幸的是,这留下了一些小的但可见的空白处。这是因为x,y列表不包括精确的交点,这使得where=子句选择离交点最近的点。

相关问题