displot 的图例和归一化

问题描述

我正在尝试制作一个显示多条曲线的密度图。我正在使用 seaborn 模块中的 displot,如下所示,而不是 distplot,因为我收到警告(在 Pycharm 中),后者将在未来被删除。不过,我找不到如何更改此图中的标签。现在它们只是被列为“0”和“1”。另外,我想对两条曲线进行归一化,以便更好地比较它们。 common_norm=True 似乎不起作用。有谁知道我可以使用什么论点?有一个叫做“legend”,但它是一个布尔值。我查看了关于 distplot 图例的 one other post,但它对我不起作用。

一个简短的工作示例:

import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt

mylist = [np.random.normal(loc=0.0,scale=1.0,size=None) for i in range(50)]
yourlist = [np.random.normal(loc=1.0,scale=3,size=None) for j in range(50)]
sns.displot([mylist,yourlist],kind="kde",common_norm=True,color=["blue","red"],linewidth=1)
plt.show()

density plots

解决方法

这是一个修订版,应该能给出你所期待的情节

sns.displot(
    {"a": mylist,"b": yourlist},# Use a dict to assign labels to each curve
    kind="kde",common_norm=False,# Normalize each distribution independently
    palette=["blue","red"],# Use palette for multiple colors
    linewidth=1
)

我认为唯一需要更多解释的变化是common_norm。密度由曲线下的面积归一化(它应该等于 1)。如果 common_norm=True,则所有曲线下的面积总和等于 1;如果 common_norm_False,则每条曲线下的面积等于 1。我认为您期望通过最大值进行归一化,但这并不是真正可以解释的。 common_norm 参数在此处没有明显影响,因为您在每组中具有相同数量的观察值,因此它会更改 y 轴标签,但不会更改曲线的相对比例。