75

我正在factorplot(kind="bar")与seaborn一起使用。

情节很好,只是图例放错了位置:太靠右了,文字超出了情节的阴影区域。

如何让 seaborn 将图例放置在其他地方,例如左上角而不是右中角?

4

7 回答 7

79

基于@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")
  • plt作用于当前轴。从FacetGrid使用图获取轴。
    • g.fig.get_axes()[0].legend(loc='lower left')
于 2014-11-23T00:59:34.757 回答
20

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

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

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

于 2018-11-06T22:49:09.523 回答
19

在此处修改示例:

您可以使用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")

在此处输入图像描述

于 2014-11-19T14:18:31.807 回答
11
import matplotlib.pyplot as plt
import seaborn as sns

# load the data
penguins = sns.load_dataset('penguins', cache=False)

图级别图

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()

在此处输入图像描述

轴水平图

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()

在此处输入图像描述

于 2021-08-19T14:37:43.387 回答
9

这就是我能够将图例移动到绘图内的特定位置并更改绘图的方面和大小的方式:

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)  

图例位置已更改

这对我来说可以改变情节的大小和方面,并将图例移到情节区域之外。

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)  

尺寸、方面和图例发生变化的小提琴图位于外部

我从 mwaskom 的回答和 Fernando Hernandez 的回答中发现了一点

于 2017-07-16T02:42:51.360 回答
3

看来您可以直接致电:

g = sns.factorplot("class", "survived", "sex",
                data=titanic, kind="bar",
                size=6, palette="muted",
               legend_out=False)

g._legend.set_bbox_to_anchor((.7, 1.1))
于 2020-09-10T23:16:17.863 回答
1

如果您想自定义您的图例,只需使用该add_legend方法。它采用与 matplotlib 相同的参数plt.legend

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")
g.add_legend(bbox_to_anchor=(1.05, 0), loc=2, borderaxespad=0.)
于 2020-02-18T10:22:22.327 回答