displot 的图例和规范化

Legend and normalization of displot

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

一个简短的工作示例:

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()

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

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 轴标签,但不会改变曲线的相对比例。