删除seaborn线图图例标题

问题描述 投票:0回答:4

我想从我的seaborn lineplot 图例中删除标题。我尝试使用这个答案无济于事:

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

Seaborn lineplot still with 'event' title

如果我尝试将标题设置为

None
,我也会得到同样的结果。有趣的是,将标题设置为其他内容似乎是在现有标题之前:

ax.legend().set_title('Something else')

Seaborn lineplot still with prepend title

看起来seaborn将这个标题视为一个隐藏的传奇条目。我该如何解决这个问题?

python matplotlib seaborn legend line-plot
4个回答
108
投票

重要:这个答案是关于使用

hue
作为图例标题出现的情况。在所有其他情况下,问题本身已经包含删除标题的常用方法。

事实上,seaborn 滥用了图例标签作为(子组)标题。因此,想法可以是删除此标签,或用自定义文本替换它。

替换为自定义文本:

legend = ax.legend()
legend.texts[0].set_text("Whatever else")

enter image description here

去除标签:

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

enter image description here

删除标签后,您当然还可以设置另一个(真实的)标题:

handles, labels = ax.get_legend_handles_labels()
ax.legend(handles=handles[1:], labels=labels[1:], title="Whatever else")

enter image description here


50
投票
import seaborn as sns
g = sns.lineplot(x="myXs", y="myYs", hue="myHue", data=mydf)
g.legend_.set_title(None)

9
投票

扩展存在的重要性欧内斯特的答案:

我遇到了同样的问题,但“删除标签”示例从实际图例中删除了标题和第一项。

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

因此,这仅删除了图例标题:

handles, labels = ax.get_legend_handles_labels()
ax.legend(handles=handles, labels=labels)

0
投票

至少从seaborn 0.12.2开始,我们可以再次放置图例,而不是在图例上设置空标题。

fmri = sns.load_dataset("fmri")
ax = sns.lineplot(x="timepoint", y="signal", hue="event", data=fmri)
ax.legend()

另一种方法是传递数组/列表而不是数据帧列作为

hue
size
参数。

ax = sns.lineplot(x="timepoint", y="signal", hue=fmri["event"].tolist(), data=fmri)

上述两个选项都会产生以下输出(其中没有图例标题)。

result

© www.soinside.com 2019 - 2024. All rights reserved.