如何将 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)
我正在使用如下所示的 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)