将seaborn情节传奇移到另一个位置?

use*_*114 38 python seaborn

我正在使用factorplot(kind="bar")seaborn.

情节很好,除了传说是错位的:右边太多,文字从情节的阴影区域出来.

如何让seaborn将传奇置于其他地方,例如左上角而不是右中角?

Tre*_*ney 50

import matplotlib.pyplot as plt
import seaborn as sns

# load the data
penguins = sns.load_dataset('penguins', cache=False)
Run Code Online (Sandbox Code Playgroud)

图级图

g = sns.displot(penguins, x="bill_length_mm", hue="species", col="island", col_wrap=2, height=3)
sns.move_legend(g, "upper left", bbox_to_anchor=(.55, .45), title='Species')
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

轴水平图

ax = sns.histplot(penguins, x="bill_length_mm", hue="species")
sns.move_legend(ax, "lower center", bbox_to_anchor=(.5, 1), ncol=3, title=None, frameon=False)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Jul*_*les 37

建立在@ user308827的答案:您可以使用legend=Falsefactorplot并通过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")
Run Code Online (Sandbox Code Playgroud)

  • `plt`作用于当前轴.要从"FacetGrid"获取轴,请使用图.例如:`g.fig.get_axes()[0] .legend(loc ='lower left')` (10认同)

use*_*827 13

修改http://web.stanford.edu/~mwaskom/software/seaborn/examples/factorplot_bars.html中的示例

您可以使用 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")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


leo*_*ard 8

在这里查看文档:https://matplotlib.org/users/legend_guide.html#legend-location

添加这个只是为了将传奇带出情节:

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


den*_*son 5

这就是我如何将图例移动到绘图内的特定位置并更改绘图的外观和大小的方式:

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)  
Run Code Online (Sandbox Code Playgroud)

图例位置已更改

这对我来说可以更改情节的大小和外观,以及将图例移到情节区域之外。

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)  
Run Code Online (Sandbox Code Playgroud)

小提琴图,其大小,外观和图例已更改,位于外部

我想通了这一点,从mwaskom的答案在这里和费尔南多·埃尔南德斯的答案在这里