本文介绍了在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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!
本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!