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

如何对Seaborn FacetGrid图例排序?将'No'置于'Yes'上方

如何调整Seaborn FacetGrid图例顺序让'No'在'Yes'上方?

嘿,这个需求很常见,我给你两种实用的解决办法,按需选择就行:

方法一:从源头指定hue顺序(推荐)

在创建FacetGrid时,直接用hue_order参数定义你想要的显示顺序,这样后续生成的图例自然会遵循这个排序,代码修改后如下:

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt

df = sb.load_dataset('tips')
# 通过hue_order指定['No', 'Yes'],让No优先显示
g = sb.FacetGrid(df, col='sex', hue='smoker', col_wrap=2, hue_order=['No', 'Yes'])
g.map(plt.scatter, 'total_bill', 'tip', alpha=.7)
g.add_legend()  # 用add_legend()比直接调用axes.legend更规范,能自动匹配hue的设置
plt.show()

这里的hue_order参数可以直接锁定hue变量的展示顺序,配合g.add_legend()使用,能确保图例的颜色、文字和绘图元素完全对应,是最稳妥的方式。

方法二:手动调整已有图例的顺序

如果不想修改FacetGrid的初始化参数,也可以在生成图例时手动调整手柄和标签的顺序:

import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt

df = sb.load_dataset('tips')
g = sb.FacetGrid(df, col='sex', hue='smoker', col_wrap=2)
g.map(plt.scatter, 'total_bill', 'tip', alpha=.7)

# 获取当前图例的手柄和标签,重新排序后生成新图例
handles, labels = g.axes[-1].get_legend_handles_labels()
# 按'No'、'Yes'的顺序重新索引
sorted_idx = [labels.index('No'), labels.index('Yes')]
sorted_handles = [handles[i] for i in sorted_idx]
sorted_labels = [labels[i] for i in sorted_idx]
g.axes[-1].legend(sorted_handles, sorted_labels)

plt.show()

这种方法适合已经生成绘图对象后,临时调整图例顺序的场景,通过提取现有图例元素,重新排序后再传入legend()函数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 20:22:31