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.
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:
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()