如何让 matplotlib.pyplot 在 OSX 上的虚拟环境中工作?

How to get matplotlib.pyplot working in virtual environment on OSX?

我第一次看到 where I found out I needed to install my own backend framework. Since the answer mentioned PyQt4, I chose to go with that. Following links in the doc, I eventually ended up downloaded SIP (pre-req for PyQt4) and then PyQt4 from here 的答案。最后,在我的代码中,我有:

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'

的模块

在处理上述异常的过程中,又发生了一个异常:

Traceback (most recent call last):

File ".../program.py", line 7, in import matplotlib.pyplot as plt File ".../venv/lib/python3.5/site-packages/matplotlib/pyplot.py", line 114, in _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()

File ".../venv/lib/python3.5/site-packages/matplotlib/backends/init.py", line 32, in pylab_setup globals(),locals(),[backend_name],0)

File ".../venv/lib/python3.5/site-packages/matplotlib/backends/backend_qt4agg.py", line 18, in from .backend_qt5agg import FigureCanvasQTAggBase as _FigureCanvasQTAggBase

File ".../venv/lib/python3.5/site-packages/matplotlib/backends/backend_qt5agg.py", line 15, in from .backend_qt5 import QtCore

File ".../venv/lib/python3.5/site-packages/matplotlib/backends/backend_qt5.py", line 31, in from .qt_compat import QtCore, QtGui, QtWidgets, _getSaveFileName, version

File ".../venv/lib/python3.5/site-packages/matplotlib/backends/qt_compat.py", line 162, in "Matplotlib qt-based backends require an external PyQt4, PyQt5,\n" ImportError: Matplotlib qt-based backends require an external PyQt4, PyQt5, or PySide package to be installed, but it was not found.

有没有人遇到过这种情况?关于从这里到哪里去的任何调试建议或帮助?

编辑:我会补充一点,尝试从我的虚拟环境中 import PyQt4 是可行的,所以我不确定为什么 matplotlib 找不到它...

EDIT2:不确定是否重要,但我正在使用 PyCharm

您是否考虑过使用 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

我为此苦苦挣扎了好几天,在浏览了大量不同的堆栈溢出帖子后,终于找到了一个非常简单的解决方案。

这是我针对 MacOSX 和 Python3.X 的解决方案,适用于已经通过自制软件(即 brew install python3)安装 python3 并且安装了 virtualenv 并且已经创建虚拟环境的人python3(例如通过 virtualenvwrapper,mkvirtualenv myvenv -p python3):

(1)使用brew安装pyqt和sip:

    $ brew install sip --with-python3
    $ brew install pyqt --with-python3

(2) Link 安装在 /usr/local/Cellar/ 中的 pyqt 和 sip 文件(自制程序安装的默认位置)到您的 virtualenv 中的 site-packages 目录:

    $ 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.X 的地方)

(3) pip install matplotlib in your virtualenv(如果你还没有)并修改 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 matplotlibpip install matplotlib)。

我遇到了同样的问题,我所做的实际上解决了它(如果你不理解豪尔赫所说的一切,它可能会有所帮助!):
1. 继续 anaconda 导航器并启动 qtconsole
2. 输入:$ brew install sip --with-python3
$brew install pyqt --with-python3 3.将它的结果复制到python,然后执行
现在尝试制作图表,它应该可以工作!

解决了以下问题:

pip 安装 matplotlib 在你的根目录中有一个名为 ~/.matplotlib 的目录。

在那里创建一个文件 ~/.matplotlib/matplotlibrc 并添加以下代码:后端:TkAgg