如何调整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()
原理说明
- 给
plot和fill_between都添加label参数,让matplotlib自动匹配图例项,避免手动传入图例名称的繁琐操作。 - 获取图例对象后,遍历其中的图例手柄(handles),判断目标对象是否为Patch类型(填充区域的图例以Patch形式存在)。
- 调用
set_linewidth()方法设置Patch的线条宽度,使其与plot曲线的图例线宽保持一致(plot默认线宽约为1.5,可根据需求自行调整数值)。
内容的提问来源于stack exchange,提问作者Felix Sorgenfrei
相关产品推荐
相关产品推荐

