I am trying to find guidance on how to control and customize the legend in Seaborn plots but I can not find any.
To make the issue more concrete I provide a reproducible example:
surveys_by_year_sex_long
year sex wgt
0 2001 F 36.221914
1 2001 M 36.481844
2 2002 F 34.016799
3 2002 M 37.589905
%matplotlib inline
from matplotlib import *
from matplotlib import pyplot as plt
import seaborn as sn
sn.factorplot(x = "year", y = "wgt", data = surveys_by_year_sex_long, hue = "sex", kind = "bar", legend_out = True,
palette = sn.color_palette(palette = ["SteelBlue" , "Salmon"]), hue_order = ["M", "F"])
plt.xlabel('Year')
plt.ylabel('Weight')
plt.title('Average Weight by Year and Sex')
In this example I would like to be able to define M as Male and F as Female and instead of sex to have Sex as title of the legend.
Your advice will be appreciated.
First, to access the legend created by seaborn needs to be done via the seaborn call.
g = sns.factorplot(...)
legend = g._legend
This legend can then be manipulated,
legend.set_title("Sex")
for t, l in zip(legend.texts,("Male", "Female")):
t.set_text(l)
The result is not totally pleasing because the strings in the legend are larger than previously, hence the legend would overlap the plot
One would hence also need to adjust the figure margins a bit,
g.fig.subplots_adjust(top=0.9,right=0.7)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With