【发布时间】:2017-02-03 08:22:27
【问题描述】:
我正在 macOS 中编写终端 REPL,并且很难复制您使用 IPython 的 %matplotlib 魔术获得的非阻塞 matplotlib 绘图行为。
考虑以下简单的 REPL(我在 macOS 10.12 上使用来自 Anaconda 的 Python 3.5):
#!/usr/bin/env pythonw
# Basic REPL (note: doesn't show output)
_globals = _locals = globals().copy()
while True:
command = input(">>> ")
res = exec(command, _globals, _locals)
pythonw 是使情节正确聚焦所必需的。
如果你在这个shell中运行
import matplotlib.pyplot as plt
plt.plot([1, 2])
plt.show()
它会阻塞。我试过了
import matplotlib
matplotlib.interactive(True)
import matplotlib.pyplot as plt
plt.plot([1, 2])
这不会阻塞,但出现的绘图窗口完全没有响应。我什至无法关闭它。跑步
import matplotlib.pyplot as plt
plt.plot([1, 2])
plt.show(block=False)
是一样的。
另一方面,如果你运行
%matplotlib
import matplotlib.pyplot as plt
plt.plot([1, 2])
在 IPython 5.1.0 中,它可以完美运行。 REPL 不会阻塞,我可以与情节互动。
我尝试阅读 IPython 源代码以找出我需要复制的内容,但我无法弄清楚。我什至尝试过运行IPython.core.pylabtools.activate_matplotlib("MacOSX"),但它不起作用。
【问题讨论】:
标签: python macos matplotlib plot ipython