Python,如何填充多条(4)曲线?

时间:2021-08-31 12:05:26
fig = plt.figure(num=1)
ax=fig.add_subplot(111)

def f1(x):
    return 1/x
def f2(x):
  return 2/x
def f3(x):
  return np.sqrt(x**2-1)
def f4(x):
  return np.sqrt(x**2-2)
s= np.arange(np.sqrt(2),5,0.05)
t=np.arange(1,5,0.05)
y1=f1(t)
y2=f2(t)
y3=f3(t)
y4=f4(s)
ax.plot(t,y1,'k-',t,y2,'k-',t,y3,'k-',s,y4,'k-')
plt.xlim([1.1,2.1])
plt.ylim([0.5,1.5])
plt.show()

I would like to fill the area between the curves described by those four functions. Not sure how to use the fill_between option in this case.

我想填补这四个函数描述的曲线之间的区域。在这种情况下,不确定如何使用fill_between选项。

1 个解决方案

#1


2  

You can only fill_between two curves not four. So using the four curves that you have, you can create two curvers, y5 and y6 which I have shown below, and then use these to fill_between them. An example is shown below:

您只能填充两条曲线而不是四条曲线。因此,使用您拥有的四条曲线,您可以创建两个我在下面显示的曲线y5和y6,然后使用它们填充它们之间。一个例子如下所示:

I have also ploted the individual functions using symbols so that it is easy to see the different new curves just created ...

我还使用符号绘制了各个函数,以便很容易看到刚刚创建的不同新曲线...

import pylab as plt 
import numpy as np 

fig = plt.figure(num=1)
ax=fig.add_subplot(111)

def f1(x): return 1/x
def f2(x): return 2/x
def f3(x): return np.sqrt(x**2-1)
def f4(x): return np.sqrt(x**2-2)

t=np.arange(1,5,1e-4) # use this if you want a better fill
t=np.arange(1,5,0.05)
y1=f1(t)
y2=f2(t)
y3=f3(t)
y4=f4(t*(t**2>2) + np.sqrt(2)*(t**2<=2) ) # Condition checking

y5 = np.array(map(min, zip(y2, y3)))
y6 = np.array(map(max, zip(y1, y4)))

ax.plot(t,y1, 'red')
ax.plot(t,y2, 'blue')
ax.plot(t,y3, 'green')
ax.plot(t,y4, 'purple')

ax.plot(t, y5, '+', ms=5, mfc='None', mec='black')
ax.plot(t, y6, 's', ms=5, mfc='None', mec='black')

ax.fill_between(t, y5, y6, where=y5>=y6)

plt.xlim([1.1,2.1])
plt.ylim([0.5,1.5])

plt.show()

#1


2  

You can only fill_between two curves not four. So using the four curves that you have, you can create two curvers, y5 and y6 which I have shown below, and then use these to fill_between them. An example is shown below:

您只能填充两条曲线而不是四条曲线。因此,使用您拥有的四条曲线,您可以创建两个我在下面显示的曲线y5和y6,然后使用它们填充它们之间。一个例子如下所示:

I have also ploted the individual functions using symbols so that it is easy to see the different new curves just created ...

我还使用符号绘制了各个函数,以便很容易看到刚刚创建的不同新曲线...

import pylab as plt 
import numpy as np 

fig = plt.figure(num=1)
ax=fig.add_subplot(111)

def f1(x): return 1/x
def f2(x): return 2/x
def f3(x): return np.sqrt(x**2-1)
def f4(x): return np.sqrt(x**2-2)

t=np.arange(1,5,1e-4) # use this if you want a better fill
t=np.arange(1,5,0.05)
y1=f1(t)
y2=f2(t)
y3=f3(t)
y4=f4(t*(t**2>2) + np.sqrt(2)*(t**2<=2) ) # Condition checking

y5 = np.array(map(min, zip(y2, y3)))
y6 = np.array(map(max, zip(y1, y4)))

ax.plot(t,y1, 'red')
ax.plot(t,y2, 'blue')
ax.plot(t,y3, 'green')
ax.plot(t,y4, 'purple')

ax.plot(t, y5, '+', ms=5, mfc='None', mec='black')
ax.plot(t, y6, 's', ms=5, mfc='None', mec='black')

ax.fill_between(t, y5, y6, where=y5>=y6)

plt.xlim([1.1,2.1])
plt.ylim([0.5,1.5])

plt.show()