【问题标题】:Interactive matplotlib plots in jupyter notebookjupyter notebook 中的交互式 matplotlib 绘图
【发布时间】:2016-09-10 16:46:11
【问题描述】:

以下 sn-p 在 ipython 控制台中按预期工作:

> anaconda3/bin/ipython3
In [1]: import matplotlib.pyplot as plt
        import pandas as pd
        import numpy as np
In [2]: plt.ion()
In [3]: pd.Series(np.sin(np.arange(0, 10, 0.1))).plot() # plot window appears
In [4]: pd.Series(np.cos(np.arange(0, 10, 0.1))).plot() # second line is drawn in the same window

终端没有被阻塞。如何在 Jupyter 笔记本中获得相同的行为?也就是说,可以从笔记本中逐步绘制的外部交互式绘图窗口。

相同的 sn-p 不显示笔记本中的绘图。执行 plt.show() 会显示外部窗口,但会阻塞执行直到窗口关闭。

提前致谢。

【问题讨论】:

    标签: matplotlib ipython jupyter jupyter-notebook


    【解决方案1】:

    事实证明,即使不需要后端开关,笔记本也需要 %matplotlib 魔法,之后笔记本的行为与控制台相同。例如,将其作为笔记本中的第一个单元格执行:

    %matplotlib
    import matplotlib.pyplot as plt
    plt.ion()
    

    【讨论】:

    • @Minato 添加了示例。
    • @garyp 不,据我所知,这不是问题。我想我是在不相关的事情上使用 %magic 偶然发现的。
    • 示例添加在哪里?我仍然在笔记本外的一个新人物中拥有情节
    【解决方案2】:

    魔术命令 %matplotlib 让 jupyter notebook 使用 Qt5Agg 交互式后端。

    【讨论】:

      【解决方案3】:

      要使用交互式后端模拟对 plt.show() 的阻塞调用,您需要等到您的图形处于活动状态。

      # provided interactive backend
      # e.g. %matplotlib qt5
      fig = plt.figure()
      
      plt.show()
      
      try:
          while fig.number in plt.get_fignums():
              plt.pause(0.1)
      except:
          plt.close(fig.number)
          raise
      

      当用户按下 Jupyter Notebook 中的中断内核(又名停止)按钮时,异常情况会关闭图形窗口。

      【讨论】:

        猜你喜欢
        • 2016-11-16
        • 2018-10-03
        • 1970-01-01
        • 2020-05-19
        • 1970-01-01
        • 2017-11-03
        • 2018-11-18
        • 2018-04-12
        相关资源
        最近更新 更多