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

如何移动Seaborn Objects绘图中含颜色与标记的完整图例

解决Seaborn Objects双图例移动问题

问题根源在于Seaborn Objects会为颜色和标记分别创建独立的图例对象,这两个图例都存储在figure.legends列表中,你之前只提取了第一个(颜色图例),导致标记图例没被移动。

完整解决方案代码

import matplotlib.pyplot as plt
import seaborn as sns
import seaborn.objects as so

mpg = sns.load_dataset("mpg")
f, axs = plt.subplots(1, 2, figsize=(8, 4))
_ = (
    so.Plot(mpg, "weight", "acceleration", color="cylinders")
    .add(so.Dot(), marker="origin")
    .scale(
        color=["#49b", "#a6a", "#5b8", "#128", "#332"],
        marker={"japan": ".", "europe": "+", "usa": "*"},
    )
    .on(axs[0])
    .plot()
)

# 合并所有图例的手柄与标签
handles = []
labels = []
# 清空figure上的原有图例并收集元素
while f.legends:
    legend = f.legends.pop(0)
    handles.extend(legend.legend_handles)
    labels.extend([text.get_text() for text in legend.texts])

# 将完整图例添加到目标子图
axs[0].legend(handles, labels, loc="upper right")

plt.show()  # Python脚本运行需添加该行

关键步骤说明

  • 遍历f.legends列表,取出所有图例对象(这里是颜色和标记两个),分别提取它们的手柄(handles)和标签(labels)并合并。
  • 调用子图的legend()方法,将合并后的手柄和标签传入,即可把完整的双图例添加到子图指定位置(loc参数可按需调整,比如"lower right"、"center left"等)。
  • 循环清空f.legends是为了避免原有图例残留,确保只有子图上的新图例显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:42:24