【问题标题】:How to show a matplotlib animation in Colab without also showing the plot?如何在 Colab 中显示 matplotlib 动画而不显示情节?
【发布时间】:2020-07-02 21:36:23
【问题描述】:

在 Google Colab 笔记本中,我正在构建一个 matplotlib 动画,并将其显示为 HTML5 视频。我的脚本的最后几行是:

# ...
anim = animation.ArtistAnimation(plt.gcf(), frames,
                                 interval=250, blit=True, repeat=False)
HTML(anim.to_html5_video())

视频看起来不错,但随后我得到了视频下方显示的另一张情节图像(显示的内容与视频的最后一帧相同)。如果我最后打电话给plt.close(),情节和视频都不会显示。不显示剧情如何显示视频?

【问题讨论】:

  • 你应该调用plt.close() 之前显示动画。 anim = ...; plt.close(); HTML(...)

标签: python matplotlib ipython google-colaboratory


【解决方案1】:

简答:致电plt.close() 以避免显示静态图像。

Jupyter 笔记本(包括 Colab)将自动显示在单元格中创建的任何 matplotlib 图像,无论单元格中的显式打印或显示语句如何。你可以通过运行看到这一点

plt.plot([1, 2, 3])
print('done')

单元格输出将包含隐式显示的图表和显式显示的文本。

您可以通过在单元格末尾关闭图表来防止这种隐式显示:

plt.plot([1, 2, 3])
plt.close()
print('done')

在您的情况下,您希望显示从图表构建的 HTML 动画,而不是图表本身。它看起来像这样:

anim = animation.ArtistAnimation(plt.gcf(), frames,
                                 interval=250, blit=True, repeat=False)
plt.close()
HTML(anim.to_html5_video())

【讨论】:

  • 感谢您的解释!这可行且有道理,但我很好奇,为什么 plt.close() 行的位置很重要?在 anim.to_html5_video() 行之前,按照您的建议,关闭/隐藏图形;在 anim.to_html5_video() 行之后,正如我之前尝试过的那样,仍然显示该图。 plt.close() 不应该在这两种情况下隐藏图形吗?
  • 是的, plt.close() 在这两种情况下都会隐藏图形。但是如果HTML(...)不在最后一行,in就不会显示(除非你明确调用IPython.display.display()
  • 啊,明白了。为了将来参考,现在,视频显示只是因为 HTML 行是最后一行,而笔记本的行为是显示最后一行的输出。但通常,要显示为视频生成的 HTML,我需要调用 IPython.display。谢谢!
  • 是的,它就像任何其他 Python 语句一样。例如如果您在单元格末尾写1+1,它将显示出来。但是如果你在单元格中间写1+1,它是不会显示的,除非你使用print()或者IPython.display.display()显式显示。
猜你喜欢
  • 2022-09-25
  • 2020-10-10
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-21
  • 2018-11-28
  • 2018-12-15
相关资源
最近更新 更多