web-dev-qa-db-ja.com

シーボーンの伝説を編集

データフレームとPythonのこのコードを使用して、プロットを作成できました。

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 [%]')

enter image description here

ただし、凡例に「+ 0」と「。1」と言うことは、読者にとってあまり役に立ちません。凡例のラベルを編集するにはどうすればよいですか? 「ミレニアル世代」と言うのではなく、「ジェネレーション」と「+ミレニアル世代」、「古い世代」と言うのが理想的です。

33
Oliver G

legend_outTrueに設定されている場合、凡例はg._legendプロパティで利用可能であり、図の一部です。 Seabornの凡例は、標準のmatplotlibの凡例オブジェクトです。したがって、次のような凡例テキストを変更できます。

import seaborn as sns

tips = sns.load_dataset("tips")
g = sns.lmplot(x="total_bill", y="tip", hue="smoker",
 data=tips, markers=["o", "x"], 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)

sns.plt.show()

enter image description here

legend_outFalseに設定されている場合の別の状況。どの軸に凡例があるかを定義する必要があります(以下の例では、これは軸番号0です)。

import seaborn as sns

tips = sns.load_dataset("tips")
g = sns.lmplot(x="total_bill", y="tip", hue="smoker",
 data=tips, markers=["o", "x"], 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)
sns.plt.show()

enter image description here

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

import seaborn as sns

tips = sns.load_dataset("tips")
g = sns.lmplot(x="total_bill", y="tip", hue="smoker",
 data=tips, markers=["o", "x"], 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)

sns.plt.show()

このコードは、 Grid class に基づくすべてのseabornプロットで機能します。

35
Serenity

上記を一通り読んでくれました。これは私にとっての答えでした:

import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")

g = sns.lmplot(
    x="total_bill", 
    y="tip", 
    hue="smoker", 
    data=tips,  
    legend=False
)

plt.legend(title='Smoker', loc='upper left', labels=['Hell Yeh', 'Nah Bruh'])
plt.show(g)

より多くの引数については、これを参照してください: matplotlib.pyplot.legend

enter image description here

24
Glen Thompson