Remove seaborn lineplot legend title

谁说胖子不能爱 提交于 2019-11-27 01:56:23

问题


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?


回答1:


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")




回答2:


Extending ImportanceOfBeingErnest answer:

I had the same problem, but the 'Removing the label' example removed the title and first item from the actual legend.

handles, labels = ax.get_legend_handles_labels() ax.legend(handles=handles[1:], labels=labels[1:])

So this removes just the legend title

ax.legend(handles=handles[0:], labels=labels[0:])

(I can't comment so adding this as answer)



来源:https://stackoverflow.com/questions/51579215/remove-seaborn-lineplot-legend-title

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