簡體   English   中英

Seaborn 通過多個 groupby 繪制熊貓數據框

[英]Seaborn plot pandas dataframe by multiple groupby

我有 Pandas 數據框,其中我在兩個類別(正、負)中嵌套了 4 個類別(50,60,70,80),我想根據列(例如,A_mean ...)使用 seaborn kdeplot 進行繪圖通過...分組。 我想要實現的是這個圖片 (這是通過將熊貓拆分為列表來完成的)。 我瀏覽了幾篇文章,如果我想為每個 Game_RS 繪制此代碼,則此代碼( 在 seaborn 中使用 Pandas groupby 數據繪制多個單圖)適用於一個級別,但不適用於兩個級別:

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 格式訪問——數據,我像往常一樣加載它們:

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

在此處輸入圖片說明

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) 

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM