本文介绍了在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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!
The End


大气响应式网络建站服务公司织梦模板
高端大气html5设计公司网站源码
织梦dede网页模板下载素材销售下载站平台(带会员中心带筛选)
财税代理公司注册代理记账网站织梦模板(带手机端)
成人高考自考在职研究生教育机构网站源码(带手机端)
高端HTML5响应式企业集团通用类网站织梦模板(自适应手机端)