如何将 DataFrame 列的图例添加到 kdeplot facetgrid?

How to add legend of DataFrame columns to kdeplot facetgrid?

我正在使用如下所示的 DataFrame:

df = pd.DataFrame({'a': [20, 30, 50, 55], 'b': [100, 50, 20, 15], 'c':[15, 20, 400, 10]})

我试过这个:

(sns
.FacetGrid(data = df,
            height=10,
            xlim=(0, 10),
            legend_out= True
).add_legend()
.map(sns.kdeplot, data = df, shade = True)
)

它产生了这个:https://i.stack.imgur.com/g9AmS.png

如您所见,没有图例。如何添加?

与其先创建 FacetGrid 然后添加 kdeplot,不如直接调用 sns.displot(kind='kde', ...) 更容易。参数 shade=True 在最新版本中已重命名为 fill=True。图例会默认放在外面。

另请注意,使用 seaborn 命令时,对函数进行长时间的串联会相当混乱,而且通常不会产生预期的结果。 (无论如何,add_legend() 只有在最后,在创建 kde 图之后才有意义。)

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd

df = pd.DataFrame({'a': [20, 30, 50, 55], 'b': [100, 50, 20, 15], 'c': [15, 20, 400, 10]})

g = sns.displot(data=df,
                height=5,
                aspect=3,
                kind='kde',
                fill=True,
                facet_kws={'xlim': (-100, 500)})
plt.show()

这对我有用

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

d = {"aa": [20, 30, 50, 55], "bb": [100, 50, 20, 15], "cc": [15, 20, 400, 10]}
df = pd.DataFrame(data=d)

g = sns.FacetGrid(data=df, height=10, xlim=(0, 10))
g.map_dataframe(sns.kdeplot, data=df, shade=True)

legend_names = dict(d.keys())
plt.legend(legend_names)
plt.show(block=True)