Seaborn catplot 图例的背景颜色和边框

问题描述 投票:0回答:1

MWE

from matplotlib import pyplot as plt
import seaborn as sb
df = sb.load_dataset("titanic")
g = sb.catplot(
    data=df, x="who", y="survived", hue="class",
    kind="bar"
)
plt.tight_layout()
plt.savefig('bah.png')

图看起来很糟糕,因为图例是透明的。如何更改其不透明度以及如何在图例周围添加黑色边框?

matplotlib seaborn legend catplot
1个回答
0
投票

对于图形级图(例如

sns.catplot()
),它会创建一个包含一个或多个子图的网格,seaborn 会创建一个图形图例。对于只有一个子图的图形级图,您可以使用轴级等效图,此处为
sns.barplot()
。默认情况下,这些图例在子图中有更标准的图例。

要更改seaborn图例的属性,建议使用

sns.move_legend()
。一个小小的不便是
move_legend()
需要您明确设置一个位置。要获得边框,需要
frameon=True
edgecolor=...

不幸的是,

plt.tight_layout()
没有考虑人物图例。您可以调用
plt.subplots_adjust(right=...)
再次创建空间,使图例不会与最右侧的子图重叠。

这是一些示例代码:

from matplotlib import pyplot as plt
import seaborn as sns

df = sns.load_dataset("titanic")
g = sns.catplot(
    data=df, x="who", y="survived", hue="class",
    kind="bar"
)
sns.move_legend(g, frameon=True, facecolor='lightgrey', edgecolor='black',
                loc='center right', bbox_to_anchor=(1, 0.5))
plt.tight_layout()
plt.subplots_adjust(right=0.8) # mitigate overlapping legend due to tight_layout 
plt.show()

change legend frame and background color in sns.catplot

PS:使用seaborn的标准缩写有助于将您的代码与文档相匹配,并且可以更轻松地在StackOverflow等网站上找到类似的示例。

© www.soinside.com 2019 - 2024. All rights reserved.