在python中如何在一个图形上绘制多个kdedet [英] How to plot many kdeplots on one figure in python

查看:20
本文介绍了在python中如何在一个图形上绘制多个kdedet的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下数据

name        val
G.Kittle    4.0
G.Kittle    10.0
D.Hopkins   3.0
L.Fitzgerald    6.0
... ...
C.Kupp  18.0
R.Woods 21.0
N.Harry 7.0
S.Michel    -6.0

每个name都有很多值,我想在同一张图上绘制每个名称的分布。我试着用hue参数来做这件事,但是这把所有的事情都搞砸了,把所有的分布都当作面积为1的,但是,我希望每个分布彼此独立,并且有它们自己的面积1。这有意义吗?我还希望它们都是灰色的,这是hue自然不允许的。

编辑:另外,当我使用hue时,我收到此错误UserWarning: Dataset has 0 variance; skipping density estimate.

推荐答案

sns.kdeplot()有一个参数common_norm=,该参数默认为True。在这种情况下,KDE曲线将与值的数量成比例缩放,使总面积和为1。设置common_norm=False将显示所有KDE曲线,使每条曲线的面积分别为1。

注意,还有一个multiple=参数,默认为"layer",但也可以设置为"stack""fill"。在这种情况下,通用规范将是合适的。

所有曲线都可以着色为灰色,提供了一个调色板,作为带有"灰色"的颜色列表。列表的长度应与色调值的数量相同。由于所有色调值都相同,图例看起来会很奇怪。可以使用legend=False隐藏图例。

当一个色调值仅出现在一行时,不会绘制具有一个元素的kdedit,但会显示警告Dataset has 0 variance; skipping density estimate

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

df = pd.DataFrame({'name': np.random.choice([*'ABCD'], 100, p=[0.4, 0.3, 0.2, 0.1]),
                   'val': np.random.rand(100).cumsum()})
df.loc[0, 'name'] = 'E'  # exactly one row with name 'E'
df['name'] = df['name'].astype('category')
sns.kdeplot(data=df, x='val', hue='name', palette=['grey'] * len(df['name'].cat.categories),
            common_norm=False, legend=False)
plt.show()

这篇关于在python中如何在一个图形上绘制多个kdedet的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆