mra*_*ick 10 python macos matplotlib
matplotlib与 MacOS 一起使用的问题是一个棘手的问题,已经通过许多讨论(见下文)进行了彻底审查。问题如下:
这是我想出的最简单的代码片段,它允许重现问题:
from matplotlib import pyplot as plt
x = [1, 2, 3]
y = [1, 2, 3]
plt.plot(x, y)
plt.show()
Run Code Online (Sandbox Code Playgroud)
这会引发以下错误:
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)
Run Code Online (Sandbox Code Playgroud)
该问题记录在此处。一种解决方案是将PyQt5软件包安装到您的 Python 安装中,并在脚本的开头添加以下几行:
import matplotlib
matplotlib.use("Qt5Agg")
Run Code Online (Sandbox Code Playgroud)
虽然这非常有效,但我想知道为什么其他后端无法提供类似的行为。
事实上,我尝试使用 MacOSX 后端:
import matplotlib
matplotlib.use('MACOSX')
Run Code Online (Sandbox Code Playgroud)
这会导致错误:
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.
Run Code Online (Sandbox Code Playgroud)
两个解决方案出来了:
python.app( conda install python.app) 并使用pythonw而不是启动您的脚本pythonTKAgg后端使用第一个效果很好,但我想知道:
pythonw而不是调用python?python.app包到底是什么?至于第二个,它在一定程度上“工作”:运行matplotlibusing 时TkAgg,绘图窗口确实有问题。事实上,它通常需要点击“缩放”、“平移”或“主页”按钮才能使它们实际工作。使用它真的很痛苦。我问了几个使用matplotlibwith 的同事或朋友TkAgg,他们都有同样的问题。
有谁知道这种情况的原因?或者是否有任何解决方法可以避免此问题(除了安装 pyqt5)?
小智 2
我将做出一些假设。如果他们错了我道歉。
就我个人而言,我在 Mac 上使用 matplotlib 从来没有遇到过任何问题。我的设置是:Mojave、使用 python 内置模块 ( ) 的venvpython3 -m venv中的 Python3.7.3和 matplotlib 3.0.3。
我无法回答您有关如何解决问题的问题,但我想尝试回答您的“是否有解决方法”的问题。就我个人而言,我在使用 Anaconda/Spyder/Conda for Python 时总是遇到问题。我一直认为将其作为自己的二进制文件/应用程序安装在系统上会导致最少的错误。
现在,我并不是说您必须手动下载并安装。我使用自制程序,我认为它让我每天都头痛(例如升级应用程序和软件包)。这就是我建议的“解决方法”。因为通过 Anaconda/Spyder 安装不是已经是正确安装 Python 的解决方法了吗?我一直认为执行一项解决方法需要更多的解决方法才能实现完整功能。例如,在默认情况下应该检测到时必须指定 matplotlib 后端。
显然,我对这个工具有点偏见,这可能反映在这个答案中,所以要持保留态度。尽管 Conda 是一个我认为有用的合法工具,但当 conda 不包含我想要的包时,我发现必须同时使用 pip 和 conda 很烦人。
| 归档时间: |
|
| 查看次数: |
5150 次 |
| 最近记录: |