如何更改 Seaborn FacetGrid 的图例标题?

jam*_*kim 9 python plot matplotlib seaborn

在 Seaborn 的 FacetGrid 基于线图中,想更改标签标题。这看起来是一件简单的事情,但结果却是一项艰巨的任务

tips = sns.load_dataset("tips")
g = sns.FacetGrid(tips, col= 'day', legend_out= True,)
g.map(sns.lineplot, 'total_bill', 'tip', 'sex', 'time',
     ci = False)    
g.fig.legend()
Run Code Online (Sandbox Code Playgroud)

图例标题“性”

我想通过添加“标题”参数将标签标题从“性别”更改为“性别”。但事实证明,这成为了现有标题之上的标题

g.add_legend(title = 'Gender')
Run Code Online (Sandbox Code Playgroud)

图例标题“性别”和标题“性别”

我还尝试访问Fig.legend来更改文本,但现在它显示多个图例,可能是由于多方面的绘图。

l = g.fig.legend()
l.texts[0].set_text('Gender')
Run Code Online (Sandbox Code Playgroud)

图例标题“性别”,但是有多个图例

我确信可能有一种“hacky”方法可以通过更改数据中的变量名称来更改名称,但我想知道是否有一种方法可以简单地替换 Seabron FacetGrid 的图例标题,或者如果不可能,通过“fig.legend”添加标题,同时显示单个相关图例。非常感谢!

Imp*_*est 1

为什么不将列名替换"sex""Gender"

import matplotlib.pyplot as plt
import seaborn as sns

tips = sns.load_dataset("tips")
tips.columns = [n if n != "sex" else "Gender" for n in tips.columns]

g = sns.FacetGrid(tips, col= 'day')
g.map(sns.lineplot, 'total_bill', 'tip', 'Gender', 'time',
     ci = False)    
g.add_legend()

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述