使用Pandas和matplotlib制作海生热图动画

2024-09-29 02:25:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用dataframe的一列绘制了一个静态热图,我用它创建了一个pivot表。你知道吗

我现在要创建一个动画热图,它读取原始数据帧的每一列,旋转它,然后更新热图。你知道吗

我原来的数据框是下面的更大版本:

                       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

我正在使用的透视表示例:

antpost   Anterior   Lateral  Posterior    Medial
distprox                                         
Proximal  0.150269  0.171977   0.131310  0.194924
Distal    0.111212  0.130440   0.164124  0.077468

这是我正在使用的代码,虽然我没有得到错误,压力图,但它不会更新-它是所有零值的颜色。你知道吗

column_total_number = len(region_pressure_data.columns)
row_total_number = len(region_pressure_data.index)
fig = plt.figure()

def init():
      sns.heatmap(np.zeros((2, 4)), vmin = 0, vmax = 1, square=True)

def animate():
    column_number = 0
    while column_number < column_total_number:
        region_pressure_data_one_time = region_pressure_data.iloc[:,column_number:column_number + 1]

        index_parts = np.array(region_pressure_data_one_time.index.str.split().values.tolist())

        region_pressure_data_one_time["antpost"] = index_parts[:,0]
        region_pressure_data_one_time["distprox"] = index_parts[:,1]

        pivot = region_pressure_data_one_time.pivot(index="distprox", columns = "antpost")
        rowTitles = ["Proximal", "Distal"]
        pivot = pivot.reindex([rowTitles])
        pivot.columns = pivot.columns.droplevel()
        pivot.columns = pivot.columns.droplevel()
        columnTitles = ["Anterior", "Lateral", "Posterior", "Medial"]
        pivot = pivot[columnTitles]

        plt.clf()
        sns.heatmap(pivot, vmin = 0, vmax = 1, annot=True)
        column_number += 1

anim = animation.FuncAnimation(fig, animate, init_func=init, frames=20, repeat = False)

有没有什么我做错了的事情,或者有没有更直接的方法来实现我想要的?提前感谢您的帮助!:)


Tags: columnsnumberdataindextimecolumnoneregion