You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib中fill_betweenx插值效果不符合预期的问题求助

解决Matplotlib自定义填充区域不符合预期的问题

你想要填充的是x从1.2到末端(x=4)、y从底部(y=0)到顶部(y=2)的矩形区域,但原代码的fill_betweenx参数使用错误,导致渲染效果不符合预期。

原代码问题分析

fill_betweenx(y, x1, x2)的作用是填充同一y值下,x1和x2之间的区域。你传入的第三个参数是y_1而非目标右边界x值,同时where=(x_1 > 1.2)基于离散的多边形顶点判断,无法覆盖整个y范围的填充条件,因此填充逻辑完全错误。

两种解决方法

方法1:直接填充目标矩形区域

如果目标区域是规则矩形,直接用fill_between指定边界即可:

import numpy as np
import matplotlib.pyplot as plt

def plot():
    fig, ax = plt.subplots(1, 1)

    # 绘制原始多边形轮廓
    c_x = [0, 0, 2, 3, 4, 4]
    c_y = [0, 2, 2, 2, 2, 0]
    x_1 = np.array(c_x)
    y_1 = np.array(c_y)
    ax.plot(x_1, y_1, color='black')

    # 填充x=1.2到4,y=0到2的矩形区域
    ax.fill_between([1.2, 4], 0, 2, color='lightblue', alpha=0.5)

    ax.axis('equal')
    plt.show()
    
plot()

方法2:自定义多边形填充(适配非规则轮廓)

如果后续需要适配非规则的原始多边形,可构造目标填充区域的顶点数组,用fill函数填充:

import numpy as np
import matplotlib.pyplot as plt

def plot():
    fig, ax = plt.subplots(1, 1)

    # 绘制原始多边形轮廓
    c_x = [0, 0, 2, 3, 4, 4]
    c_y = [0, 2, 2, 2, 2, 0]
    x_1 = np.array(c_x)
    y_1 = np.array(c_y)
    ax.plot(x_1, y_1, color='black')

    # 构造目标填充区域的顶点
    fill_x = [1.2, 4, 4, 1.2, 1.2]
    fill_y = [2, 2, 0, 0, 2]
    ax.fill(fill_x, fill_y, color='lightblue', alpha=0.5)

    ax.axis('equal')
    plt.show()
    
plot()

以上两种方法都能准确填充你需要的矩形区域,渲染效果符合预期。

内容的提问来源于stack exchange,提问作者PeterPauken

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 06:05:23