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

如何调整Matplotlib中plt.fill图例的线条宽度以匹配plt.plot

解决fill_between图例线宽与plot图例不一致的问题

问题说明

使用plt.fill_between绘制两条曲线间的填充区域时,默认生成的图例线宽和plt.plot绘制的曲线图例线宽差异较大,直接设置linewidth参数只会影响plot的图例,无法调整填充区域的图例线宽。

解决方案

可以通过获取图例中的填充补丁(Patch)对象,手动调整其线条宽度,使其与plot曲线的图例线宽匹配。以下是修改后的完整代码:

import matplotlib.pyplot as plt
import numpy as np

a_seq = [0.,0.5, 1.5 ,2.,  2.5, 3.,  3.5, 4.,  4.,  4. ]
l1 = [0.0, 0.0, 1.0, 1.0, 1.0, 2.0, 3.0, 4.0, 4.0, 4.0]
l2 = [0.0, 0.2, 1.1, 1.2, 1.2, 2.1, 3.2, 4.0, 4.0, 4.0]

# 绘制plot曲线并指定label
plt.plot(np.arange(0,len(a_seq)), a_seq, label='line3')
# 绘制填充区域并指定label
plt.fill_between(np.arange(0,len(l1)), l2, l1, alpha=0.5, label='line4')

# 获取图例对象
leg = plt.legend()

# 遍历图例手柄,调整填充补丁的线宽
for handle in leg.legendHandles:
    if isinstance(handle, plt.matplotlib.patches.Patch):
        handle.set_linewidth(1.5)  # 线宽值可根据plot图例的默认宽度调整

plt.show()

原理说明

  1. 给plot和fill_between都添加label参数,让matplotlib自动匹配图例项,避免手动传入图例名称的繁琐操作。
  2. 获取图例对象后,遍历其中的图例手柄(handles),判断目标对象是否为Patch类型(填充区域的图例以Patch形式存在)。
  3. 调用set_linewidth()方法设置Patch的线条宽度,使其与plot曲线的图例线宽保持一致(plot默认线宽约为1.5,可根据需求自行调整数值)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:57:27