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')
图看起来很糟糕,因为图例是透明的。如何更改其不透明度以及如何在图例周围添加黑色边框?
对于图形级图(例如
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()
PS:使用seaborn的标准缩写有助于将您的代码与文档相匹配,并且可以更轻松地在StackOverflow等网站上找到类似的示例。