2015-04-12 65 views
3
import matplotlib.pyplot as plt 
import numpy as np 

def domain(): 
    x = np.arange(0, 10, 0.001) 

    f1 = lambda x: (2*x - x**2)**0.5 
    plt.plot(x, f1(x), label = '$y = \sqrt{2x - x^2}$') 
    plt.plot(f1(x), x, label = '$x = \sqrt{2y - y^2}$') 
    plt.xlabel('X') 
    plt.ylabel('Y') 
    plt.legend(loc='best') 


    axes = plt.gca() 
    axes.set_xlim([0, 5]) 
    axes.set_ylim([0, 5]) 
    plt.show() 

domain() 

enter image description here填寫兩個功能

我怎樣才能利用fill_between()填補了2線之間的區域之間的區域?換句話說,我怎樣才能在綠色和藍色線條之間填充小花瓣?

回答

4

@user 5061是正確的代碼,反功能已關閉

import matplotlib.pyplot as plt 
import numpy as np 

def domain(): 
    x = np.arange(0, 10, 0.001) 

    f1 = lambda x: (2*x - x**2)**0.5 
    f2 = lambda x: 1 - (1-x*x)**0.5 # other part is f2 = lambda x: 1 + (1-x*x)**0.5 
    plt.plot(x, f1(x), label = '$y = \sqrt{2x - x^2}$') 
    plt.plot(f1(x), x, label = '$x = \sqrt{2y - y^2}$') 
    plt.fill_between(x, f1(x), f2(x), where=f1(x)>=f2(x), interpolate=True, color='yellow') 
    plt.xlabel('X') 
    plt.ylabel('Y') 
    plt.legend(loc='best') 


    axes = plt.gca() 
    axes.set_xlim([0, 5]) 
    axes.set_ylim([0, 5]) 
    plt.show() 

domain() 

由於不影響交叉點,因此未採用正向分量1 + (1-x*x)**0.5

enter image description here

+0

我明白你在F2 X來表示Y,但是,你有2種可能的表現形式,不是嗎?根據你選擇+表達什麼? –

+0

'1 +(1-x * x)** 0.5'對於'0 1',所以推導使用'1-(1-x * x)** 0.5' – Zero

1

當條件滿足時,您可以使用fill_between()並在兩行之間填充。

enter image description here

(我改變了一下你的代碼,因爲你寫它的辦法我只好找到f1反函數)

import matplotlib.pyplot as plt 
import numpy as np 

def domain(): 
    x = np.arange(0, 2, 0.001) 

    f = lambda x: x**0.5 
    g = lambda x: x**2 
    plt.plot(x, f(x), label = '$y = \sqrt{2x - x^2}$') 
    plt.plot(x, g(x), label = '$x = \sqrt{2y - y^2}$') 
    plt.xlabel('X') 
    plt.ylabel('Y') 
    plt.legend(loc='best') 

    plt.fill_between(x, f(x), g(x),where=f(x) > g(x)) 

    axes = plt.gca() 
    axes.set_xlim([0, 2]) 
    axes.set_ylim([0, 2]) 

    plt.show() 

domain()