You need to enable JavaScript to run this app. matplotlib中组合LineCollection等元素时图例句柄不对齐怎么调整
优惠活动
大模型
产品
解决方案
定价
更多

matplotlib中组合LineCollection等元素时图例句柄不对齐怎么调整

问题原因

你遇到的图例错位是因为LineCollection、fill_between返回的PolyCollection、scatter返回的PathCollection属于不同类型的绘图元素,生成图例时默认的垂直偏移参数不统一,散点标记和折线的基线没有对齐。


解决方法

引入Matplotlib的HandlerTuple处理器统一管控组合句柄的对齐参数,同时调整散点的垂直偏移量让三者居中对齐,修改后的代码如下:
首先导入依赖:

from matplotlib.legend_handler import HandlerTuple

修改图例调用逻辑:

lc = LineCollection(segments, cmap='turbo',zorder=3)
p1 = ax.add_collection(lc)
p2 = ax.fill_between(x, errmin,errmax, color=colors[1],zorder=2)
ps = ax.scatter(x,y,marker='o',s=1,c=y,cmap='turbo',zorder=4)

ax.legend(
    [(p2, p1, ps)], 
    ["(min/avg/max)"],
    fontsize=tinyfont, 
    facecolor='white', 
    loc='lower right',
    # 新增以下参数解决对齐问题
    handler_map={tuple: HandlerTuple(ndivide=None)},
    scatteryoffsets=[0.5], # 让散点在图例项高度的居中位置
    handleheight=1.2 # 调整图例项高度避免元素挤压
)

如果调整后还有轻微偏移,可以微调scatteryoffsets的数值(取值0到1之间,对应图例项高度的比例位置),或者调整handlelength参数适配你的字体大小。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 22:27:04