web-dev-qa-db-ja.com

シーボーンプロットの凡例を別の位置に移動しますか?

Seabornでfactorplot(kind="bar")を使用しています。

凡例の配置が間違っている場合を除き、プロットは問題ありません。右に書きすぎると、テキストがプロットの網掛け領域から出てしまいます。

シーボーンが伝説をどこか別の場所、たとえば右中ではなく左上に配置するにはどうすればよいですか?

35
user124114

@ user308827の答えに基づいて:legend=False factorplotで、matplotlibを使用して凡例を指定します。

import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="whitegrid")

titanic = sns.load_dataset("titanic")

g = sns.factorplot("class", "survived", "sex",
                   data=titanic, kind="bar",
                   size=6, palette="muted",
                   legend=False)
g.despine(left=True)
plt.legend(loc='upper left')
g.set_ylabels("survival probability")
32
Jules

サンプルの変更 here

legend_out = Falseを使用できます

import seaborn as sns
sns.set(style="whitegrid")

titanic = sns.load_dataset("titanic")

g = sns.factorplot("class", "survived", "sex",
                    data=titanic, kind="bar",
                    size=6, palette="muted",
                   legend_out=False)
g.despine(left=True)
g.set_ylabels("survival probability")

enter image description here

13
user308827

こちらのドキュメントをご覧ください: https://matplotlib.org/users/legend_guide.html#legend-location

これを追加するだけで、プロットから凡例を引き出すことができます。

plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)

7
leonard

これにより、凡例をプロット内の特定の場所に移動し、プロットのアスペクトとサイズを変更できました。

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
matplotlib.style.use('ggplot')
import seaborn as sns
sns.set(style="ticks")

figure_name = 'rater_violinplot.png'
figure_output_path = output_path + figure_name

viol_plot = sns.factorplot(x="Rater", 
                       y="Confidence", 
                       hue="Event Type", 
                       data=combo_df, 
                       palette="colorblind",
                       kind='violin',
                       size = 10,
                       aspect = 1.5,
                       legend=False)

viol_plot.ax.legend(loc=2)
viol_plot.fig.savefig(figure_output_path)  

Legend location changed

これにより、プロットのサイズとアスペクトを変更したり、プロットエリア外に凡例を移動したりすることができました。

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
matplotlib.style.use('ggplot')
import seaborn as sns
sns.set(style="ticks")


figure_name = 'rater_violinplot.png'
figure_output_path = output_path + figure_name

viol_plot = sns.factorplot(x="Rater", 
                       y="Confidence", 
                       hue="Event Type", 
                       data=combo_df, 
                       palette="colorblind",
                       kind='violin',
                       size = 10,
                       aspect = 1.5,
                       legend_out=True)

viol_plot.fig.savefig(figure_output_path)  

violin plot with changed size, aspect and legend located outside

Mwaskomの答え here とFernando Hernandezの答え here からこれを理解しました。

5
denson