【问题标题】:Fill area between two functions填充两个函数之间的区域
【发布时间】:2015-04-12 09:15:53
【问题描述】:
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()

如何使用fill_between() 填充两行之间的区域?换句话说,我怎样才能把绿线和蓝线之间的小花瓣填满?

【问题讨论】:

    标签: python matplotlib plot


    【解决方案1】:

    @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,因为它不影响交叉点。

    【讨论】:

    • 我知道您在 f2 中用 x 表示 y,但是,您有 2 个可能的表达式,不是吗?根据你选择 + 的表达方式?
    • 1 + (1-x*x)**0.5 对于0<x<1 始终是>1,所以扣用1 - (1-x*x)**0.5
    【解决方案2】:

    您可以使用fill_between() 并在满足条件时在两行之间填充。

    (我修改了你的代码,因为你写的方式我必须找到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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-17
      • 2019-05-25
      • 2020-07-12
      • 2023-03-22
      相关资源
      最近更新 更多