Python 来自熊猫字典数据帧的动画热图

Python 来自熊猫字典数据帧的动画热图,python,pandas,matplotlib,seaborn,gif,Python,Pandas,Matplotlib,Seaborn,Gif,我想从一组数据帧(例如保存在字典中)绘制一个动画热图,可以是gif格式,也可以是电影格式 例如,假设我有以下DFs集合。我可以一个接一个地显示它们。但我想让它们都以相同的方式显示在同一个图中,就像GIF一样(一个热图循环) 最简单的方法是首先创建单独的png图像,然后使用ImageMagick等软件将其转换为动画gif 创建png的示例: import pandas as pd import numpy as np from matplotlib import pyplot as plt da

我想从一组数据帧(例如保存在字典中)绘制一个动画热图,可以是gif格式,也可以是电影格式

例如,假设我有以下DFs集合。我可以一个接一个地显示它们。但我想让它们都以相同的方式显示在同一个图中,就像GIF一样(一个热图循环)


最简单的方法是首先创建单独的png图像,然后使用ImageMagick等软件将其转换为动画gif

创建png的示例:

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt

dataframe_collection = {}
for i in range(5):
    dataframe_collection[i] = pd.DataFrame(np.random.random((5,5)))
    #plt.pcolor(dataframe_collection[i])
    sns.heatmap(dataframe_collection[i])
    plt.gca().set_ylim(0, len(dataframe_collection[i])) #avoiding problem with axes
    plt.axis('off')
    plt.tight_layout()
    plt.savefig(f'dataframe_{i}.png')
安装后,以下shell命令将创建gif。如果默认设置不令人满意,请使用来探索许多选项

convert.exe-delay 20-loop 0 dataframe.*.png dataframes.gif

另请参见关于在matplotlib中创建动画和动画gif

请注意,Seaborn的heatmap还具有一些功能,例如
sns.heatmap(dataframe\u collection[i],annot=True)

如果无法使用ImageMagick,可以通过快速显示单个png文件来显示视频,模拟视频。
和post包含更多的解释和示例代码。尤其是第二部分看起来很有希望。

您使用什么库来可视化图像对于可视化单个DF,我通常使用pandas样式。background\u gradient()。Seaborn或matplotlib也可以。有没有办法避免使用外部软件(本例中为ImageMagick)?链接文章中提到的解决方案使用matplotlib的动画模块创建GIF。但这也只能通过ImageMagick实现。注意,ImageMagick是一个高度优化和高度灵活的开源软件包。不幸的是,它没有一个好的python绑定。但是命令行很容易使用。在Python内部,您可以使用
import io;系统('convert…')
。请注意,GIF是一种非常古老的格式,只有256种颜色,而且压缩动画的技巧很多。所有的框架都需要在一起才能创建gif。嗨,约翰。谢谢你的帮助!我在一台服务器上工作,但他们没有安装ImageMagick(在我的笔记本电脑上,它仍然工作)。这就是我问的原因。我当然看到了许多使用matplotlib的动画示例。但我仍然无法在热图上找到工作。那些带有init()和update()函数的代码看起来让我很困惑,我无法将其转换为使用问题代码中的热图。您需要一个后端,如ImageMagick或ffmeg来创建动画文件。大多数web服务都是标准安装的,因为它们使用非常频繁。例如,在创建缩略图时使用ImageMagick。我认为如果没有安装ImageMagick或ffmpeg,“混乱”matplotlib的动画模块将不会保存动画文件。
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt

dataframe_collection = {}
for i in range(5):
    dataframe_collection[i] = pd.DataFrame(np.random.random((5,5)))
    #plt.pcolor(dataframe_collection[i])
    sns.heatmap(dataframe_collection[i])
    plt.gca().set_ylim(0, len(dataframe_collection[i])) #avoiding problem with axes
    plt.axis('off')
    plt.tight_layout()
    plt.savefig(f'dataframe_{i}.png')