Python, How to fill multiple (4) curves?
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 in the area between the curves described by these four functions. Not sure how to use the option fill_between
in this case.
+3
source to share
1 answer
You can only have fill_between
two curves, not four. So, using the four curves you have, you can create the two finders, y5
and y6
, which I have shown below, and then use them for fill_between
. An example is shown below:
I also used separate functions using symbols to make it easy to see once the new curves are 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()
+2
source to share