【问题标题】:Fill area between two curves in python在python中填充两条曲线之间的区域
【发布时间】:2020-01-18 00:19:17
【问题描述】:

我正在尝试对我绘制的两条曲线之间的区域进行着色。 这是我绘制的。

使用以下代码。

plt.scatter(z1,y1, s = 0.5, color = 'blue')
plt.scatter(z2,y2, s = 0.5, color = 'orange')

我尝试使用plt.fill_between(),但要使其工作,我需要在x_axis 上拥有相同的数据(需要执行plt.fill_between(x,y1,y2) 之类的操作)。 是否有任何其他功能可能对此有所帮助,或者我只是使用 fill_between 错误。

【问题讨论】:

    标签: python python-3.x matplotlib scatter-plot


    【解决方案1】:

    你可以试试:

    plt.fill(np.append(z1, z2[::-1]), np.append(y1, y2[::-1]), 'lightgrey')
    

    例如:

    import numpy as np
    import matplotlib.pyplot as plt
    
    x1 = np.array([1,2,3])
    y1 = np.array([2,3,4])
    x2 = np.array([2,3,4,5,6])
    y2 = np.array([1,2,3,4,5])
    # plt.plot(x1, y1, 'o')
    # plt.plot(x2, y2, 'x')
    
    plt.scatter(x1, y1, s = 0.5, color = 'blue')
    plt.scatter(x2, y2, s = 0.5, color = 'orange')
    plt.fill(np.append(x1, x2[::-1]), np.append(y1, y2[::-1]), 'lightgrey')
    plt.show()
    

    【讨论】:

    • 当使用这个我得到以下错误。 ValueError: x 和 y 必须具有相同的第一个维度,但具有 (107156,) 和 (168560,) 形状
    • 我发布的代码初稿有错误,现在试试吧:)
    • 这很好用。谢谢!现在只有最后一件事。所以阴影区域现在有点覆盖了我最初的情节。有没有办法让我“把它送到后面”?不太确定你是否明白我的意思
    • 不客气。也许你可以设置透明度?添加此参数:alpha=0.4
    【解决方案2】:

    试试这个代码:

    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.arange(0.0, 2, 0.01)
    y1 = np.sin(2 * np.pi * x)
    y2 = 1.2 * np.sin(4 * np.pi * x)
    
    
    fig, (ax1) = plt.subplots(1, sharex=True)
    ax1.fill_between(x, 0, y1)
    ax1.set_ylabel('between y1 and 0')
    

    【讨论】:

    • 您是在此处创建自己的数据吗?我如何将其应用于我拥有的数据?
    • 欢迎来到 StackOverflow。请正确格式化和缩进您的答案,如果可能,请进一步说明。编码愉快!