是否可以在Google Colaboratory中进行动画可视化?

时间:2018-01-06 18:06:02

标签: python matplotlib jupyter-notebook ipython google-colaboratory

是否可以使用%matplotlib notebook和Matplotlib FuncAnimations在Google Colaboratory中制作动画可视化效果?

当我尝试时,我得到了

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安装工作正常。

2 个答案:

答案 0 :(得分:1)

尝试使用

%matplotlib inline

而不是

%matplotlib notebook

答案 1 :(得分:0)

我遇到了同样的问题。最后,我可以将一个不寻常的工作解决方案混在一起 它还没有与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)