问题 plt.show()在使用Anaconda Python的OSX上挂起


import matplotlib.pyplot as plt
plt.figure()
plt.show()

...蟋蟀。翻译挂起,我似乎无法打断它。

这是OSX上的Python 2.7.9和Anaconda 2.2.0(x86_64)。

这会发生在其他人身上吗?我怎么解决这个问题?


2063
2018-05-06 20:14


起源

你确定吗? plt.show() 挂起而不是导入?因为OS X上的字体缓存存在问题,在答案中解决了这个问题 这个问题。 - Lukas Graf
导入工作正常,据我所知,其他一切都是如此。绝对会发生这种情况 plt.show() - James Atwood
它运行得很好,在窗口弹出之前花了几秒钟。您是使用交互式还是非交互式模式?你的后端是什么?您是从命令行中的脚本运行这些行,还是在python解释器中键入它们?根据我使用OS-X的经验,从命令行创建的窗口通常不会出现在前面。可能是情节窗口是在其他窗口后面创建的还是隐藏在角落里? - titusjan
不 - 任何地方都没有窗户。后端是'MacOSX'。绝对挂了。 - James Atwood
啊,@ titusjan提出了一个很好的观点。现在他提到了后端,我记得我曾经有一个类似的问题,一旦我将支持更改为已解决 backend: TkAgg 在我的 ~/.matplotlib/matplotlibrc。如果使用的话,你可能也希望给它一个镜头 pythonw 对你来说不太方便。 - Lukas Graf


答案:


尝试使用启动Python pythonw 代替 python


10
2018-05-07 19:19



我不知道为什么会这样,但确实如此。谢谢! - James Atwood
在OS X上,您需要使用 pythonw 每当你使用挂钩到OS X窗口系统的东西(例如matplotlib)时,因为它需要“欺骗”OS X认为它是一个框架(使用 python.app 你会在中找到的包裹 anaconda 目录)。 - asmeurer
应该使用的另一件事是使用 ipython,因为它自动使用python.app。 - asmeurer
运用 ipython 为我工作,谢谢@asmeurer。对于脚本,我将hashbang行更改为 #!/usr/bin/env ipython 它就像一个魅力。 - A.Wan


这很可能是您的后端设置的问题。如果您希望您的图表显示为内联(在您的笔记本内),请使用以下添加的行导入:

import matplotlib.pyplot as plt
%matplotlib inline

要让您的图表以内联方式(在笔记本内部)以交互方式显示,请使用此行导入:

import matplotlib.pyplot as plt
%matplotlib notebook

要让您的图表显示在笔记本之外(在新窗口中),请使用此行导入:

import matplotlib.pyplot as plt
%matplotlib qt

注意: 您需要重新启动内核以在内联笔记本和外部qt之间切换以避免错误: 警告:无法更改为其他GUI工具包

最后,如果问题仍然存在,以下内容可能有助于揭示正在发生的事情:

import matplotlib
matplotlib.get_backend()

如果使用上述任何选项,则应输出以下内容之一:

  • '模块://ipykernel.pylab.backend_inline'
  • 'nbAgg'
  • 'Qt4Agg'

0
2017-10-21 12:15





在iPython的开头添加:

% pylab inline

-1
2018-05-13 22:03