web-dev-qa-db-ja.com

シーボーンラインプロットの凡例のタイトルを削除

シーボーンラインプロットの伝説からタイトルを削除したいと思います。私は この答え を使用してみました:

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

シーボーンはタイトルを隠された伝説のエントリーとして扱っているようです。どうすれば解決できますか?

16
Daniel

実際、シーボーンは伝説のラベルを(サブグループ)タイトルとして誤用しています。そのため、このラベルを削除するか、カスタムテキストで置き換えることが考えられます。

カスタムテキストで置き換える:

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

ImportanceOfBeingErnest回答の拡張:

同じ問題がありましたが、「ラベルの削除」の例では、実際の凡例からタイトルと最初のアイテムが削除されました。

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

これにより、凡例のタイトルのみが削除されます

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

(コメントできないので、これを回答として追加します)

1
badluck