从 pandas 数据框创建自定义热图
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列(前、外侧、后、内侧),显示一列的数据。
对于使用此方法取得进展的任何建议,或者是否有更好的方法来应对挑战,我将不胜感激。
提前致谢。
为什么不直接使用matplotlib
? :D
import matplotlib.pyplot as plt
plt.imshow(df.reset_index(drop=True).values[:,1:].astype("float"))
索引中的数据需要是单元格的一部分,您可能需要一个数据透视表。
为了便于解释,我创建了一些列较少的类似数据框来说明我在做什么。我希望这是您正在使用的结构?
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)
我有一个包含 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列(前、外侧、后、内侧),显示一列的数据。
对于使用此方法取得进展的任何建议,或者是否有更好的方法来应对挑战,我将不胜感激。
提前致谢。
为什么不直接使用matplotlib
? :D
import matplotlib.pyplot as plt
plt.imshow(df.reset_index(drop=True).values[:,1:].astype("float"))
索引中的数据需要是单元格的一部分,您可能需要一个数据透视表。 为了便于解释,我创建了一些列较少的类似数据框来说明我在做什么。我希望这是您正在使用的结构?
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)