2014-10-27 3 views
3
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() 

Я хотел бы заполнить область между кривыми, описанными этими четырьмя функциями. Не знаете, как использовать опцию fill_between в этом случае.Python, Как заполнить несколько (4) кривых?

+0

Вы хотите, чтобы заполнить область между самая низкая и самая высокая функция? (за каждую точку) – sebix

ответ

2

Вы можете только fill_between две кривые не четыре. Таким образом, используя четыре кривые, которые у вас есть, вы можете создать два кривомера, y5 и y6, которые я показал ниже, а затем используйте их для fill_between. Пример приведен ниже:

Я также вычерчивают отдельные функции, используя символы, так что легко увидеть различные новые кривые только что создали ...

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() 
Смежные вопросы