gpt4 book ai didi

python - Seaborn 通过多个 groupby 绘制 pandas 数据框

转载 作者:行者123 更新时间:2023-12-01 06:32:33 25 4
gpt4 key购买 nike

我有 pandas 数据框,其中我在两个类别(正、负)中嵌套了 4 个类别(50,60,70,80),我想用一列的seaborn kdeplot 进行绘图(例如,A_mean... )基于groupby。我想要实现的是这个picture (这是通过将 pandas 拆分到一个列表来完成的)。我浏览了几篇文章,此代码( Multiple single plots in seaborn with pandas groupby data )适用于一个级别,但不适用于两个级别,如果我想为每个 Game_RS 绘制此代码:

for i, group in df_hb_SLR.groupby('Condition'):
sns.kdeplot(data=group['A_mean_per_subject'], shade=True, color='blue', label = 'label name')

我尝试使用这个( Seaborn groupby pandas Series ),但第一个答案对我不起作用:

sns.kdeplot(df_hb_SLR.A_mean_per_subject, groupby=df_hb_SLR.Game_RS)

AttributeError: 'Line2D' object has no property 'groupby'

以及我无法完成的关键答案。有没有直接来自seaborn的方法或者直接来自pandas Dataframe的更好方法?

我的数据可以 csv 格式访问 under this link -- data我像往常一样加载它们:

df_hb_SLR = pd.read_csv('data.csv')

感谢您的帮助。

最佳答案

这是一个使用seaborn的FacetGrid的解决方案,这使得这种事情变得非常简单

g = sns.FacetGrid(data=df_hb_SLR, col="Condition", hue='Game_RS', height=5, aspect=0.5)
g = g.map(sns.kdeplot, 'A_mean_per_subject', shade=True)
g.add_legend()

enter image description here

FacetGrid 的缺点是它会创建一个新图形,因此如果您想将这些图集成到更大的子图集合中,您可以使用 groupby 获得相同的结果() 和一些循环:

group1 = "Condition"
N1 = len(df_hb_SLR[group1].unique())
group2 = 'Game_RS'
target = 'A_mean_per_subject'
height = 5
aspect = 0.5
colour = ['gray', 'blue', 'green', 'darkorange']


fig, axs = plt.subplots(1,N1, figsize=(N1*height*aspect,N1*height*aspect), sharey=True)

for (group1Name,df1),ax in zip(df_hb_SLR.groupby(group1),axs):
ax.set_title(group1Name)
for (group2Name,df2),c in zip(df1.groupby(group2), colour):
sns.kdeplot(df2[target], shade=True, label=group2Name, ax=ax, color = c)

enter image description here

关于python - Seaborn 通过多个 groupby 绘制 pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59826098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com