簡體   English   中英

從熊貓數據幀創建自定義熱圖

[英]Create custom heatmap from pandas dataframe

我有一個 8 行 6028 列的數據框。 我想為第一列創建一個 8 行的熱圖(最終我將創建一個動畫,以便地圖更新讀取每列)

這是數據框的片段:

                       value                    
percentage_time         0.00      0.15      0.16
region                                          
Anterior Distal     0.111212  0.119385  0.116270
Anterior Proximal   0.150269  0.153613  0.168188
Lateral Distal      0.130440  0.137157  0.136494
Lateral Proximal    0.171977  0.182251  0.181090
Medial Distal       0.077468  0.082064  0.082553
Medial Proximal     0.194924  0.198803  0.199339
Posterior Distal    0.164124  0.171221  0.166328
Posterior Proximal  0.131310  0.145706  0.136094

我使用了以下代碼,但它為我提供了一個帶有堆疊索引和數據框中所有數據的圖:

sns.heatmap(region_pressure_data)

在此處輸入圖片說明

當我嘗試使用以下代碼來獲取第一列時,我得到以下信息:

sns.heatmap(region_pressure_data.ix[:,0:1])

在此處輸入圖片說明

理想情況下,我想要一張 8 個區域的地圖,2 行(近端和遠端)和 4 列(前、側、后、內側),顯示一列的數據。

如果有任何關於使用這種方法取得進展的建議,或者是否有更好的方法來應對挑戰,我將不勝感激。

提前致謝。

索引中的數據需要成為單元格的一部分,您可能需要一個數據透視表。 為了說明,我創建了一些類似的數據框,列較少,以說明我在做什么。 我希望這是您正在使用的結構?

df = pd.DataFrame(index=["Anterior Distal", "Anterior Proximal", "Lateral Distal", "Lateral Proximal"], data={0.:[1,2,3,4], 1.:[5,6,7,8]})
print(df)                                                                     
>>>
                   0.0  1.0
region                     
Anterior Distal      1    5
Anterior Proximal    2    6
Lateral Distal       3    7
Lateral Proximal     4    8

據我了解,您想明確引用索引的兩個部分,因此您需要先拆分索引。 例如,您可以通過這種方式執行此操作,首先使用 Pandas 方法拆分字符串,然后將其轉換為可以切片的 numpy 數組

index_parts = np.array(df.index.str.split().values.tolist())
index_parts[:,0]
>>> array(['Anterior', 'Anterior', 'Lateral', 'Lateral'], dtype='<U8')

現在,您可以將它們添加為新列

df["antlat"] = index_parts[:,0]
df["distprox"] = index_parts[:,1]
print(df)
>>>
                   0.0  1.0    antlat  distprox
region                                         
Anterior Distal      1    5  Anterior    Distal
Anterior Proximal    2    6  Anterior  Proximal
Lateral Distal       3    7   Lateral    Distal
Lateral Proximal     4    8   Lateral  Proximal

然后您可以為您感興趣的值創建樞軸

df_pivot = df.pivot(index="antlat", columns="distprox", values=0.0)
print(df_pivot)
>>>
distprox  Distal  Proximal
antlat                    
Anterior       1         2
Lateral        3         4

並繪制它(請注意,這只是 2x2,因為我沒有在示例中添加內側和后側)

sns.heatmap(df_pivot)

在此處輸入圖片說明

為什么不直接使用matplotlib :D

import matplotlib.pyplot as plt
plt.imshow(df.reset_index(drop=True).values[:,1:].astype("float"))

暫無
暫無

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

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