是否可以在 Google Colaboratory 中进行动画可视化?
Posted
技术标签:
【中文标题】是否可以在 Google Colaboratory 中进行动画可视化?【英文标题】:Is it possible to do animated visualizations in Google Colaboratory? 【发布时间】:2018-06-16 06:01:27 【问题描述】:是否可以在 Google Colaboratory 中使用 %matplotlib notebook
和 Matplotlib FuncAnimations
进行动画可视化?
当我尝试时,我得到了
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/matplotlib/cbook/__init__.py", line 388, in process
proxy(*args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/matplotlib/cbook/__init__.py", line 228, in __call__
return mtd(*args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/matplotlib/animation.py", line 1560, in _stop
self.event_source.remove_callback(self._loop_delay)
AttributeError: 'NoneType' object has no attribute 'remove_callback'
我的笔记本在 macOS 上使用 Anaconda 的本地 Jupyter 安装上运行良好。
【问题讨论】:
【参考方案1】:尝试使用
%matplotlib inline
而不是
%matplotlib notebook
【讨论】:
【参考方案2】:我遇到了同样的问题。最后,我可以拼凑出一个可行的解决方案。 它还与 FuncAnimations 不兼容,但也许你会看到它是如何工作的,所以我已经发布了它,稍后会修改它。
将所有这些放在一个单元格中并运行。
开始更改代码后,请确保 IPython.display
函数在同一个单元格中运行,因为 Colaboratory 会为每个输出创建隔离的 iframe,并且 html 和 javascript 输出都必须在同一个 iframe 中结束。
import io
import numpy as np
import time
import base64
import matplotlib.pyplot as plt
import IPython
def fig2b64(f):
data = io.BytesIO()
f.savefig(data, format='png')
data.seek(0)
return base64.b64encode(data.read()).decode()
f = plt.figure(num=1, clear=True)
x = np.arange(10)
y = np.arange(10)
line = f.gca().plot(x, y)[0]
data_str = fig2b64(f)
IPython.display.display_html(f'<img class="myimage" src="data:image/png;base64,data_str"></img>', raw=True)
for _ in range(10):
time.sleep(1)
np.random.shuffle(y)
line.set_data(x, y)
data_str = fig2b64(f)
IPython.display.display_javascript(f'''
document.querySelector('.myimage').src = 'data:image/png;base64,data_str';
''', raw=True)
# suppress final output
plt.close(1)
【讨论】:
以上是关于是否可以在 Google Colaboratory 中进行动画可视化?的主要内容,如果未能解决你的问题,请参考以下文章
在 Google Colaboratory Notebook 上安装 GeoViews
如何在 Colaboratory 中使用 Tensorboard
使用 Google 的 Colaboratory,每次打开文档时都需要安装软件包吗?