如何删除 seaborn facetgrid 的图例部分

How to remove a legend part of a seaborn facetgrid

在 Matplotlib/seaborn 中,我使用 relplot 命令创建了一个 facetgrid,其中用于 row 参数的数据属性也用于样式属性。这导致了一个由两部分组成的图例。有一部分是多余的,我想删除图例中的这一多余部分。

这里是代码:

df = pd.read_csv('data.csv')
# Dataframe df has columns 'size', 'pricepersize', 'date' and 'series'

g = sns.relplot(x='size',
                y='pricepersize',
                data=df,
                kind='line',
                hue='date',
                style='series',
                row='series',
                markers=True
                )

plt.show()

这里是生成的图形网格(我要删除的图例部分用绿色标记):

如何去除图例中的“系列”部分,同时将样式参数设置为与行参数相同的数据列?

我想最简单的方法是让 sns 创建图例(这是默认设置),将其删除并根据原始图例的所需条目重新生成一个新图例。

import seaborn as sns

tips = sns.load_dataset("tips")
fg = sns.relplot(data=tips, x="total_bill", y="tip", hue="day", row="time", kind='line', style='time')

给予

然后使用

fg.legend.remove()
fg.fig.legend(handles=fg.legend.legendHandles[:5], loc=7)

终于得到