Jupyter中的Matplotlib:交互式绘图(单独窗口)无法打开

时间:2018-01-10 12:11:44

标签: python macos matplotlib

我最近切换到新的macbook pro(从2015年到2017年)。

来自

macOS Sierra 10.12.6
conda 4.3.30
Jupyter 4.1.0
Python 2.7.11 | Annaconda custom(x86_64) [GCC 4.2.1 (Apple Inc. build 5577) on darwin

High Sierra 10.13.2
Jupyter 4.4.0
conda 4.3.30
Python 2.7.14 |Anaconda custom (64-bit)| (default, Dec  7 2017, 11:07:58) 
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin   

我通过旧计算机上的新计时器备份恢复新计算机来移动我的所有数据。除了matplotlib之外,一切都很顺利。

Jupyter notebook

如果我跑,

import matplotlib.pyplot as plt 
plt.plot(range(10))
plt.show()   

它适用于在笔记本上显示内联的情节。

但如果我做%matplotlib

转到Using matplotlib backend: MacOSX

但是在终端中显示以下消息

[I 13:09:59.765 NotebookApp] Replaying 6 buffered messages
ERROR:tornado.application:Exception in callback <functools.partial object at 0x112208fc8>
Traceback (most recent call last):
  File "//anaconda/lib/python2.7/site-packages/tornado/ioloop.py", line 605, in _run_callback
    ret = callback()
  File "//anaconda/lib/python2.7/site-packages/tornado/stack_context.py", line 277, in null_wrapper
    return fn(*args, **kwargs)
  File "//anaconda/lib/python2.7/site-packages/ipykernel/kernelbase.py", line 262, in enter_eventloop
    self.eventloop(self)
  File "//anaconda/lib/python2.7/site-packages/ipykernel/eventloops.py", line 278, in loop_cocoa
    show.mainloop()
AttributeError: 'function' object has no attribute 'mainloop'   

然后现在,情节没有出现。

plt.plot(range(10))
plt.show()

现在没有任何结果。单元格执行但没有任何反应。

1 个答案:

答案 0 :(得分:0)

我在Windows 10上使用Python 3.6和最新的matplotlib软件包。这对我有用:

import numpy as np
import matplotlib
matplotlib.use('tkAgg')
import matplotlib.pyplot as plt

fig, ax = plt.subplots(1,2)
plt.show(block=False)
for i in range(100):
    print(i)
    a = np.random.rand(10,10)
    ax[0].imshow(a)
    a = np.random.rand(10,10)
    ax[1].imshow(a)
    fig.canvas.draw()

在代码中任何使用matplot之前,都必须先调用matplotlib.use('tkAgg')。关键部分是fig.canvas.draw()

上面的代码对我有用,但是当它是真正占用大量CPU的代码时,它可能会占用所有功能,因此直到循环结束之前,绘图才得以更新。在这种情况下,请在plt.pause(1e-2)之后添加此语句draw()