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

如何调整Matplotlib子图图例位置,避免多子图图例重叠?

解决子图图例重叠问题

针对你遇到的两个水平子图图例重叠的问题,可以通过Seaborn Objects API的.legend()方法显式指定第一个子图图例的位置,将其移到左侧,避免和第二个子图的图例冲突。

修改后的完整代码

import matplotlib as mpl
import seaborn.objects as so
import seaborn as sns

tips = sns.load_dataset("tips")

f = mpl.figure.Figure(figsize=(8, 2), dpi=100)
sf1, sf2 = f.subfigures(1, 2)

# 第一个子图:指定图例位置为左侧
(
    so.Plot(tips, "total_bill", "tip", color="day")
    .facet(col="day")
    .add(so.Dot(color="#aabc"), col=None, color=None)
    .add(so.Dot())
    .legend(loc="upper left")  # 关键:设置图例位置为左上
).on(sf1).plot()

# 第二个子图保持原有设置
(
    so.Plot(tips, "total_bill", "tip")
    .add(so.Dot(color="#aabc"))
    .add(so.Dot(), data=tips.query("size == 1"), color="time")
).on(sf2).plot()

精细位置调整(可选)

如果需要让图例更贴合布局,避免遮挡绘图内容,可以用bbox_to_anchor参数自定义图例的坐标偏移:

.legend(loc="upper left", bbox_to_anchor=(-0.1, 1))

这个设置会让图例稍微移出子图的左侧边界,进一步避免和绘图元素重叠。

原理说明

Seaborn Objects API默认会在子图右侧生成图例,当两个子图水平紧密排列时就会出现重叠。通过.legend()方法指定loc参数(如"upper left"、"lower left"等),可以强制将图例放置在子图的左侧区域,从根本上解决重叠问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:55:28