簡體   English   中英

帶有來自 DataFrame 行的色調的 Seaborn 分類圖

[英]Seaborn categorical plot with hue from DataFrame rows

我有這個熊貓數據幀:

>>> print(df)
Channel     0     1     2     3     4     5     6     7
Sample                                                 
7d       3.82  4.10  3.86  3.86  3.95  3.65  3.43  3.63
12d      2.97  4.32  3.50  3.58  3.22  3.37  3.58  3.78
17d      4.01  4.04  4.10  3.43  3.76  3.26  3.35  3.48
DO       3.07  3.58  3.14  3.22  3.11  3.09  3.16  3.16

我想做一個類似於這個的圖(代碼是sns.swarmplot(df) ):

在此處輸入圖片說明

但是顏色應該不是按通道(即 DataFrame 列)設置,而是按樣本(即 DataFrame 行)設置。 因此,x 軸上的每個“類別”將有 4 種顏色,分別對應於 7d、12d、17d 和 DO 行。

有沒有一種簡單的方法可以在 seaborn 中實現這一點?

編輯:我應該補充一點,我嘗試使用hue關鍵字,但它說它也需要使用xy關鍵字。 根據這個例子,我似乎需要創建一個新的 DataFrame ,其中包含一列中的所有數值和其他兩列中的樣本和通道信息。 然后我可以將繪圖稱為sns.swarmplot(x='Channel', y='values', hue='Sample') 有沒有更直接的方法不涉及創建額外的臨時數據幀?

EDIT2 :按照@BrenBarn 的建議,我最終創建了一個新的“整潔”DataFrame:

dd = []
for sa in df.index:
    print(sa)
    d = pd.DataFrame(df.loc[sa]).reset_index()
    d.columns = ['Channel', 'Leakage']
    d['Sample'] = sa
    dd.append(d)
ddf = pd.concat(dd)

然后繪制數據:

sns.swarmplot(x='Channel', y='Leakage', hue='Sample', data=ddf)

這給出了我預期的情節:

在此處輸入圖片說明

我希望有一種方法可以告訴 seaborn 使用原始的“二維表”格式來繪制對於此類數據來說更加緊湊和自然的圖。 如果這是可能的,我會接受答案;)。

您基本上已經在編輯中回答了您的問題,但您可能希望將pd.meltpd.stack視為創建新的整潔 DataFrame 的更簡單方法。

例如

s=df.stack()
s.name='values'
df_tidy=s.reset_index()
sns.stripplot(data=df_tidy,hue='sample',x='Channel',y='values')

或者

df_tidy=pd.melt(df.reset_index(),id_vars=['sample'],value_vars=df.columns.tolist(),value_name='values')
sns.stripplot(data=df_tidy,hue='sample',x='Channel',y='values')

暫無
暫無

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

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