【问题标题】:Is it possible to do animated visualizations in Google Colaboratory?是否可以在 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 安装上运行良好。

【问题讨论】:

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


    【解决方案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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-09-15
        • 1970-01-01
        • 2021-12-30
        • 2019-04-09
        • 2018-04-29
        • 1970-01-01
        • 2019-02-10
        相关资源
        最近更新 更多