首页 文章

Google Colaboratory

提问于
浏览
3

是否可以使用%matplotlib笔记本和Matplotlib FuncAnimations在Google Colaboratory中进行动画可视化?

当我尝试时,我明白了

Traceback(最近一次调用最后一次):
文件“/usr/local/lib/python3.6/dist-packages/matplotlib/cbook/ init .py”,第388行,正在处理中
代理(* args,** kwargs)
文件“/usr/local/lib/python3.6/dist-packages/matplotlib/cbook/ init .py”,第228行,在 call
返回mtd(* args,** kwargs)
文件"/usr/local/lib/python3.6/dist-packages/matplotlib/animation.py",第1560行,在_stop中
self.event_source.remove_callback(self._loop_delay)
AttributeError:'NoneType'对象没有属性'remove_callback'

我的笔记本在macOS上使用Anaconda的本地Jupyter安装工作正常 .

2 回答

  • 0

    尝试

    %matplotlib内联

    代替

    %matplotlib笔记本

  • 1

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

相关问题