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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:40:27