我第一次遇到这个问题的答案,我发现我需要安装自己的后端框架。由于答案提到了 PyQt4,我选择使用它。按照文档中的链接,我最终下载了SIP(PyQt4的pre-req),然后从这里下载了PyQt4。最后,在我的代码中,我有:
import matplotlib
matplotlib.use('Qt4agg') # need to call use() before importing plt
import matplotlib.pyplot as plt
但是我仍然收到此错误:
回溯(最近一次调用): 文件 ".../venv/lib/python3.5/site-packages/matplotlib/backends/qt_compat.py",第 159 行,在 从 PySide 导入 QtCore、QtGui、版本version_info导入错误:没有名为"PySide"的模块
在处理上述异常期间,发生了另一个异常:
回溯(最近一次调用):
文件 ".../program.py",第 7 行,在 import matplotlib.pyplot as plt File ".../venv/lib/python3.5/site-packages/matplotlib/pyplot.py",第 114 行, 在 _backend_mod、new_figure_manager、draw_if_interactive、_show = pylab_setup()
文件 ".../venv/lib/python3.5/site-packages/matplotlib/backends/init.py", 第 32 行,pylab_setup globals(),locals(),[backend_name],0)
文件 ".../venv/lib/python3.5/site-packages/matplotlib/backends/backend_qt4agg.py", 第 18 行,在 从.backend_qt5agg导入 FigureCanvasQTAggBase 作为_FigureCanvasQTAggBase
文件 ".../venv/lib/python3.5/site-packages/matplotlib/backends/backend_qt5agg.py", 第 15 行,在 从.backend_qt5导入QtCore
文件 ".../venv/lib/python3.5/site-packages/matplotlib/backends/backend_qt5.py", 第 31 行,在 从 .qt_compat import QtCore, QtGui, QtWidgets, _getSaveFileName, version
文件 ".../venv/lib/python3.5/site-packages/matplotlib/backends/qt_compat.py", 第 162 行,在 "基于 Matplotlib qt 的后端需要外部 PyQt4、PyQt5," 导入错误:基于 Matplotlib qt 的后端需要外部 PyQt4, 要安装的 PyQt5 或 PySide 软件包,但未找到。
以前有人经历过吗?关于从这里开始的任何调试建议或帮助?
编辑:我要补充一点,尝试从我的虚拟环境中import PyQt4
工作,所以我不确定为什么 matplotlib 找不到它......
编辑2:不确定这是否重要,但我正在使用PyCharm
苦苦挣扎了几天,在查看了大量不同的堆栈溢出帖子后,终于得出了一个非常简单的解决方案。
这是我对MacOSX和Python3.X的解决方案,适用于已经通过自制软件安装了python3的人(即 brew install python3
),并且已经安装了 virtualenv 并且已经使用 python3 创建了虚拟环境(例如,通过 virtualenvwrapper,mkvirtualenv myvenv -p python3
):
(1) 安装 pyqt 并使用 brew 啜饮:
$ brew install sip --with-python3
$ brew install pyqt --with-python3
(2) 将安装在 /usr/local/Cellar/
(自制软件安装的默认位置)中的 pyqt 和 sip 文件链接到 virtualenv 中的站点包目录:
$ ln -s /usr/local/Cellar/sip/{SIPVERSION}/lib/python3.X/site-packages/*.* ~/{VIRTUALENVHOME}/{VIRTUALENVNAME}/lib/python3.X/site-packages/
$ ln -s /usr/local/Cellar/pyqt/{PYQTVERSION}/lib/python3.X/site-packages/PyQt4/*.* ~/{VIRTUALENVHOME}/{VIRTUALENVNAME}/lib/python3.X/site-packages/PyQt4
确保根据系统的需要修改大括号{}中的文本,其中VIRTUALENVHOME是虚拟环境的路径,VIRTUALENVNAME是它的名称,SIPVERSION和PYQTVERSION是您下载的sip和pyqt版本。这些可以通过简单地查找其相应的目录/usr/local/Cellar/sip
和/usr/local/Cellar/pyqt
找到(这些目录的内容应该是带有版本号的单个目录)。另外不要忘记插入您正在使用的python3版本!(进入所有说 python3 的地方。十)
(3) pip 在 virtualenv 中安装 matplotlib(如果你还没有)并修改 matplotlibrc,以便 matplotlib 使用 PyQt4 后端而不是默认的 macosx 后端:
# activate your virtual environment
$ workon VIRTUALENVNAME # if you are using virtualenvwrapper
$ #source ~/{VIRTUALENVHOME}/{VIRTUALENVNAME}/bin/activate # if you are not using virtualenvwrapper
# if you haven't already, install matplotlib
$ pip install matplotlib
# modify the matplotlibrc file to change the backend it is using
$ nano ~/{VIRTUALENVHOME}/{VIRTUALENVNAME}/lib/python3.5/site-packages/matplotlib/mpl-data/matplotlibrc
这将在默认的终端文本编辑器中打开matplotlibrc
(或者,您可以使用open -e
而不是nano
在TextEdit中打开它)。转到#### CONFIGURATION BEGINS HERE
后的第一部分,然后将行backend : macosx
更改为 backend : Qt4Agg
。在下一节中,取消注释该行backend.qt4 : PyQt4
。
完成此操作后,您应该可以启动并运行。您可以测试这是否适用于以下简单的代码行(假设您在虚拟环境中安装了 ipython):
$ ipython -pylab
>>> import numpy as np
>>> plot(np.arange(10))
绘图应以直线显示。如果这不起作用,请尝试在您的虚拟环境中重新安装 matplotlib(即 pip uninstall matplotlib
和pip install matplotlib
)。
在以下情况下解决了此问题:
pip install matplotlib根目录中有一个名为~/.matplotlib的目录。
在那里创建一个文件 ~/.matplotlib/matplotlibrc 并添加以下代码:后端:TkAgg
你有没有使用conda
而不是virtualenv
?
conda create -n matplotenv matplotlib
source activate matplotenv
python -c "import matplotlib.pyplot as plt
p = plt.plot([1,2,3])
plt.show()"
source deactivate
我遇到了同样的问题,我所做的实际上解决了它(如果你不理解豪尔赫所说的一切,这可能会有所帮助!
1. 继续使用 Anaconda 导航器并启动qtconsole
2.类型:$ brew install sip --with-python3
$ brew install pyqt --with-python3
3. 在 Python 中复制它的结果,然后执行。
现在尝试制作图表,它应该可以工作!