How can I change the Seaborn FacetGrid's legend title?

99封情书 提交于 2020-02-24 05:56:04

问题


In the Seaborn's FacetGrid based lineplot, would like to change the label title. It seemed like a simple thing, but it turned out to be a hairy task

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'

I wanted to change the label title to 'gender' from 'sex' by adding 'title' argument. But it turns out that become a headline on top the existing title

g.add_legend(title = 'Gender')

legend title 'sex' with headline 'Gender'

I also tried to access the fig.legend to change the text, but now it shows multiple legends, probably due to the multi-faceted plots.

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

legend title 'Gender', however, with multiple legends

I am sure there may be a 'hacky' way to change the name by changing the variable names in the data or so, but I am wondering whether there is a way to simply replace the Seabron FacetGrid's legend title or, if it is not possible, add the title through 'fig.legend' while showing single relevant legend. Many thanks!


回答1:


Why not replace the name of the "sex" columns with "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()



来源:https://stackoverflow.com/questions/57633621/how-can-i-change-the-seaborn-facetgrids-legend-title

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!