在MacOS上使用matplotlib
是一个棘手的问题,已经有许多讨论对此进行了全面审查(请参见以下内容)。 问题如下:
- 使用MacOS Mojave 10.14.3
- 在conda环境中使用python 3.7.2
- 使用matplotlib 3.0.3
下面是我编写的最简代码片段,可用于重现该问题:
from matplotlib import pyplot as plt
x = [1, 2, 3]
y = [1, 2, 3]
plt.plot(x, y)
plt.show()
这会抛出以下错误:
2019-03-22 12:25:43.429 python3.7[22209:554135] -[NSApplication _setup:]: unrecognized selector sent to instance 0x7f85866b9de0
2019-03-22 12:25:43.431 python3.7[22209:554135] \*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSApplication _setup:]: unrecognized selector sent to instance 0x7f85866b9de0'
*** First throw call stack:([...])
libc++abi.dylib: terminating with uncaught exception of type NSException
Process finished with exit code 134 (interrupted by signal 6: SIGABRT)
这个问题在这里有记录。一个解决方案是将PyQt5
包安装到你的Python安装中,并在你的脚本开头添加以下几行代码:
import matplotlib
matplotlib.use("Qt5Agg")
虽然这样可以完美地工作,但我想知道为什么其他后端不能提供类似的行为。
事实上,我尝试使用了 MacOSX 后端:
import matplotlib
matplotlib.use('MACOSX')
导致错误的原因是:
from matplotlib.backends import _macosx
ImportError: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework. See the Python documentation for more information on installing Python as a framework on Mac OS X. Please either reinstall Python as a framework or try one of the other backends. If you are using (Ana)Conda please install python.app and replace the use of 'python' with 'pythonw'. See 'Working with Matplotlib on OSX' in the Matplotlib FAQ for more information.
问题已在这里,那里和许多其他帖子中有记录。出现了两个解决方案:
- 安装
python.app
(conda install python.app
)并使用pythonw
而不是python
来启动脚本 - 使用
TKAgg
后端
- 为什么我们需要调用
pythonw
而不是python
? python.app
包到底是什么?- 我们如何在IDE(例如PyCharm)中使用这个解决方案?
TkAgg
运行matplotlib
时,绘图窗口会出现很多问题。实际上,通常需要多次点击“缩放”,“平移”或“主页”按钮才能使它们确实起作用。真的很难使用它。我问了几个用matplotlib
和TkAgg
的同事或朋友,他们都有同样的问题。有人知道这种情况的原因吗?或者是否有任何解决此问题的方法(除了安装pyqt5)?