【问题标题】:Animated heatmap from dictionary of Pandas DataFrames来自 Pandas DataFrames 字典的动画热图
【发布时间】:2020-01-05 14:20:19
【问题描述】:

我想从一组 DataFrame(例如保存在字典中)绘制动画热图,格式为 gif 或电影。

例如,假设我有以下 DF 集合。我可以一个接一个地显示它们。但我希望它们都以与显示 GIF 相同的方式显示在同一个图中(热图的循环)。

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

dataframe_collection = {}

for i in range(5):
    dataframe_collection[i] = pd.DataFrame(np.random.random((5,5)))

    # Here within the same loop just for brevity
    sns.heatmap(dataframe_collection[i])
    plt.show()

【问题讨论】:

  • 你使用什么库进行图像可视化
  • 为了可视化单个 DF,我通常使用 pandas style.background_gradient()。 Seaborn 或 matplotlib 也可以。

标签: python pandas matplotlib seaborn gif


【解决方案1】:

最简单的方法是先创建单独的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')

安装ImageMagick 后,下面的shell 命令会创建一个gif。如果默认设置不令人满意,请使用docs 探索许多选项。

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

另请参阅this post,了解如何在 matplotlib 中创建动画和动画 gif。

请注意,Seaborn 的热图还具有一些功能,例如 sns.heatmap(dataframe_collection[i], annot=True)

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

【讨论】:

  • 有没有办法避免使用外部软件(本例中为 ImageMagick)?
  • 链接帖子中提到的解决方案使用 matplotlib 的动画模块来创建 gif。但这也只能通过 ImageMagick 工作。而且你的选择会更少。
  • 请注意,ImageMagick 是一个高度优化和高度灵活的开源包。不幸的是,它没有一个好的python绑定。但是命令行很容易使用。在 Python 中,您可以使用 import io; system('convert ....') 进行系统调用。请注意,gif 是一种非常古老的格式,只有 256 种颜色和许多压缩动画的技巧。需要所有帧一起创建 gif。
  • 嗨,JohanC。谢谢您的帮助!我在服务器上工作,他们没有安装 ImageMagick(但在我的笔记本电脑上它可以工作)。这就是我问的原因。我当然见过很多使用 matplotlib 制作动画的例子。但我仍然无法使用热图。那些带有 init() 和 update() 函数的代码让我感到困惑,我无法将其转化为使用问题代码中的热图。
  • 您需要 ImageMagick 或 ffmeg 等后端来创建动画文件。大多数 Web 服务都已标准安装,因为它们使用非常频繁。 ImageMagick 例如在创建缩略图时使用。如果您没有安装 ImageMagick 或 ffmpeg,我认为“令人困惑”的 matplotlib 动画模块不会保存动画文件。
猜你喜欢
  • 1970-01-01
  • 2022-12-22
  • 2017-10-20
  • 2020-03-13
  • 1970-01-01
  • 1970-01-01
  • 2021-07-10
  • 1970-01-01
  • 2014-06-24
相关资源
最近更新 更多