Matplotlib fill_between()填充区域偏移问题求助
问题描述
我尝试使用Matplotlib的fill_between()方法填充曲线与x=0之间的区域,但从图片中可见,填充的阴影区域出现了向左偏移的情况。需要说明的是,这是横向排列的三个子图中的一个。
使用的代码如下:
import matplotlib as mpl mpl.rcParams['figure.dpi'] = 300 from matplotlib import pyplot as plt import numpy as np # 原代码漏写了numpy导入,需补上 fig, axs = plt.subplots(1, 3) fig.tight_layout() ticks_x1 = [-400,1200,4] major_ticks_x1 = np.linspace(ticks_x1[0],ticks_x1[1],ticks_x1[2]+1) minor_ticks_x1 = np.linspace(ticks_x1[0],ticks_x1[1],5*ticks_x1[2]+1) axs[1].plot(V, -z, 'tab:cyan', linewidth=2, solid_capstyle='round') axs[1].set_title('Querkraft') axs[1].set(xlabel='V [kN]') axs[1].set_xticks(major_ticks_x1) axs[1].set_xticks(minor_ticks_x1,minor=True); axs[1].fill_between( x= V, y1= -z, color= "cyan", alpha= 0.2)
解决方案
核心问题是用错了填充函数:
fill_between()是沿x轴方向填充两条y值曲线之间的区域,你当前写法是填充y=-z和默认的y=0之间的区域,和“曲线与x=0纵轴之间填充”的需求不符,所以出现偏移。- 要实现填充曲线与x=0之间的区域,应该用**
fill_betweenx()**——这个函数沿y轴方向填充两条x值曲线之间的区域。
修改后的填充代码如下:
# 替换原fill_between代码块 axs[1].fill_betweenx( y= -z, # 传入y轴数值序列 x1= 0, # 填充左边界:x=0 x2= V, # 填充右边界:曲线的x值序列V color= "cyan", alpha= 0.2)
额外优化建议:
- 如果
V序列包含负值(曲线部分在x=0左侧),可通过where参数指定只填充目标区域,避免交叉填充:
axs[1].fill_betweenx( y= -z, x1= 0, x2= V, where= V >= 0, # 仅填充V≥0的部分 color= "cyan", alpha= 0.2)
内容的提问来源于stack exchange,提问作者numpy
相关产品推荐
相关产品推荐

