Skip to main content
 首页 » 编程设计

python之如何更改 Seaborn FacetGrid 的图例标题

2024年11月01日1lyhabc

在 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() 

legend title 'sex'

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

g.add_legend(title = 'Gender') 

legend title 'sex' with headline 'Gender'

我也尝试访问 fig.legend 来更改文本,但现在它显示了多个图例,可能是由于多面图。

l = g.fig.legend() 
l.texts[0].set_text('Gender') 

legend title 'Gender', however, with multiple legends

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

请您参考如下方法:

使用 FacetGrid.add_legend() 方法添加图例后,您可以直接访问底层的 matplotlib.legend.Legend 对象,通过链接get_text()(在本例中是六个元素中的第一个,因此索引为 0,但您同样可以使用索引 3 更改“时间”标签)和 set_text() 方法:

tips = sns.load_dataset("tips") 
g = sns.FacetGrid(tips, col= 'day') 
g.map(sns.lineplot, 'total_bill', 'tip', 'sex', 'time', 
     errorbar=('ci', False)) 
g.add_legend() 
g.legend.get_texts()[0].set_text('Gender') 
plt.show()