I would like to remove the title from my seaborn lineplot legend. I tried using this answer to no avail:
import matplotlib.pyplot as plt import seaborn as sns; sns.set() fmri = sns.load_dataset("fmri") fig, ax = plt.subplots() g = sns.lineplot(x="timepoint", y="signal", hue="event", data=fmri, ax=ax) ax.legend().set_title('')
I get the same if I try to set the title to None
. Interestingly, setting the title to something else seems to prepend to the existing title:
ax.legend().set_title('Something else')
It almost looks like seaborn is treating the title as a hidden legend entry. How can I resolve this?
You can remove each legend for the first three axes, and then use plt. figlegend() which is a legend for the entire figure. You might have to adjust the bbox_to_anchor() arguments based on what is in your legend.
To change the position of a legend in a seaborn plot, you can use the plt. legend() command. The default location is “best” – which is where Matplotlib automatically finds a location for the legend based on where it avoids covering any data points.
seaborn turns the legend frame off by default, if you want to customize how the frame looks, I think you'll need to add frameon=True when you call plt. legend . Show activity on this post. The set_style() method can take a style argument (e.g. 'white' , 'whitegrid' , 'darkgrid' , etc.)
By default, seaborn automatically adds a legend to the graph. Notice the legend is at the top right corner. If we want to explicitly add a legend, we can use the legend() function from the matplotlib library.
Important: This answer is about the case when a hue
is used that appears as a legend title. In all other cases, the question itself already contains the usual way to get rid of a title.
Indeed, seaborn is misusing a legend label as a (subgroup-)title. Hence the idea can be to either remove this label, or replace it with custom text.
Replacing with custom text:
legend = ax.legend() legend.texts[0].set_text("Whatever else")
Removing the label:
handles, labels = ax.get_legend_handles_labels() ax.legend(handles=handles[1:], labels=labels[1:])
After having removed the label you may of course still set another (real) title:
handles, labels = ax.get_legend_handles_labels() ax.legend(handles=handles[1:], labels=labels[1:], title="Whatever else")
import seaborn as sns g = sns.lineplot(x="myXs", y="myYs", hue="myHue", data=mydf) g.legend_.set_title(None)
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