seaborn.move_legend#

seaborn.move_legend(obj, loc, **kwargs)#

将图例重新创建到新的位置。

该函数的名字有点误导性。Matplotlib 图例不公开其位置参数的控制方式。因此,此函数会创建一个新的图例,将数据从原始对象复制过来,然后删除原始对象。

参数:
obj包含图的物体

此参数可以是 seaborn 或 matplotlib 对象

locstr 或 int

位置参数,与 matplotlib.axes.Axes.legend() 中的一样。

kwargs

其他关键字参数将传递给 matplotlib.axes.Axes.legend()

示例

对于轴级函数,请传递 matplotlib.axes.Axes 对象并提供一个新的位置。

ax = sns.histplot(penguins, x="bill_length_mm", hue="species")
sns.move_legend(ax, "center right")
../_images/move_legend_1_0.png

使用 bbox_to_anchor 参数进行更精细的控制,包括将图例移到轴的外部

ax = sns.histplot(penguins, x="bill_length_mm", hue="species")
sns.move_legend(ax, "upper left", bbox_to_anchor=(1, 1))
../_images/move_legend_3_0.png

传递额外的 matplotlib.axes.Axes.legend() 参数来更新其他属性

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,
)
../_images/move_legend_5_0.png

还可以移动由图级函数创建的图例。但是,当微调位置时,必须牢记,该图形在右侧将有额外的空白。

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))
../_images/move_legend_7_0.png

避免这种情况的一种方法是在 FacetGrid 上设置 legend_out=False

g = sns.displot(
    penguins,
    x="bill_length_mm", hue="species",
    col="island", col_wrap=2, height=3,
    facet_kws=dict(legend_out=False),
)
sns.move_legend(g, "upper left", bbox_to_anchor=(.55, .45), frameon=False)
../_images/move_legend_9_0.png