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
相关产品推荐
相关产品推荐

