1. ホーム
  2. python

[解決済み] シーボーン凡例のタイトルとラベルを編集する方法(図レベル関数

2022-02-26 19:36:46

質問

Seabornとpandasのdataframeを使ってプロットしてみました。 data ):

私のコード

g = sns.lmplot('credibility', 'percentWatched', data=data, hue = 'millennial', markers = ["+", "."], x_jitter = True, y_jitter = True, size=5)
g.set(xlabel = 'Credibility Ranking\n ← Low       High  →', ylabel = 'Percent of Video Watched [%]')

プロットの凡例タイトルが単に変数名('millennial')で、凡例項目が変数の値(0、1)であることにお気づきでしょう。凡例のタイトルとラベルはどのように編集できますか?理想的には、凡例のタイトルは「Generation」、ラベルは「"Millennial" and "Older Generations"」です。

どのように解決するのですか?

  • もし legend_out に設定されています。 True の場合、凡例は g._legend プロパティがあり、図の一部となっています。Seabornの凡例は標準的なmatplotlibの凡例オブジェクトです。したがって、凡例テキストを変更することができます。
  • でテストしています。 python 3.8.11 , matplotlib 3.4.3 , seaborn 0.11.2
import seaborn as sns

# load the tips dataset
tips = sns.load_dataset("tips")

# plot
g = sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips, markers=["o", "x"], facet_kws={'legend_out': True})

# title
new_title = 'My title'
g._legend.set_title(new_title)
# replace labels
new_labels = ['label 1', 'label 2']
for t, l in zip(g._legend.texts, new_labels):
    t.set_text(l)

<イグ

もう一つの状況もし legend_out が設定されます。 False . どの軸に凡例があるかを定義する必要があります(以下の例では、軸番号0です)。

g = sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips, markers=["o", "x"], facet_kws={'legend_out': False})

# check axes and find which is have legend
leg = g.axes.flat[0].get_legend()
new_title = 'My title'
leg.set_title(new_title)
new_labels = ['label 1', 'label 2']
for t, l in zip(leg.texts, new_labels):
    t.set_text(l)

<イグ

さらに、両方の状況を組み合わせて、このコードを使用することもできます。

g = sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips, markers=["o", "x"], facet_kws={'legend_out': True})

# check axes and find which is have legend
for ax in g.axes.flat:
    leg = g.axes.flat[0].get_legend()
    if not leg is None: break
# or legend may be on a figure
if leg is None: leg = g._legend

# change legend texts
new_title = 'My title'
leg.set_title(new_title)
new_labels = ['label 1', 'label 2']
for t, l in zip(leg.texts, new_labels):
    t.set_text(l)

<イグ

このコードは、seabornのプロットで、以下のものをベースにしています。 Grid クラス .