matplotlib 示例代码不适用于 python 虚拟环境
matplotlib example code not working on python virtual environment
我正在尝试在 matplotlib 中显示图像的 x y z 坐标。 the example code 在全局 python 安装上运行良好:当我移动光标时,x、y、z 值会立即更新。然而,当我 运行 在 python 虚拟环境中的示例代码时,我会点击图像几次以使坐标首先显示,然后当我点击不同的位置时它会更新对于一些。点击几下后,坐标将不再更新。
我不知道如何调试它。
这可能是 matplotlib 的 macosx 后端的问题。切换到使用 matplotlib 的替代后端(例如,使用 qt4 而不是 'macosx')。有关如何切换后端及其确切含义的详细信息 - 请参阅 the docs here。请注意,您可能必须先安装后端 - 例如pyqt
按照我在这里的建议使用 qt4agg
后端。
总而言之 - 后端处理来自 matplotlib 的输出,而 matplotlib 可以针对不同的输出格式。这些可以是 gui 显示输出格式(例如 wx
、qt4
等)或文件输出(例如 pdf
)。这些分别称为交互式和非交互式后端。
要更改后端,请执行
import matplotlib
matplotlib.use('qt4agg')
在代码中,或者 - 如果您想在每次启动 matplotlib 时进行更改 - edit your matplotlibrc file 设置后端属性,例如
backend: Qt4Agg
N.B。一条评论提醒我,自发布此答案以来,matplotlib 文档现在提到此问题和 suggest a workaround,尽管评论者指出此答案中提供的解决方案(切换到 Qt 后端)在官方文档中对他们有效解决方法对他们来说是不可能的。
最终对我有用的是制作一个包含指令的本地 matplotlibrc
文件:backend: TkAgg
.
# Within working directory where running python
vim matplotlibrc
# new file via vim, Nano, whatever
backend: TkAgg
很有用:
import matplotlib
print matplotlib.rcParams['backend']
其他注意事项:
我还使用 Homebrew (brew install pyqt
) 安装了 pyqt 并从 /usr/local/lib/python2.7/site-packages/PyQt4
复制(可以移动它)到 $MyVirtEnv/lib/python2.7/site-packages/
但是当我
import matplotlib
matplotlib.use('qt4Agg')
import librosa
"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.
也试过
pip install pyside
Successfully installed pyside-1.2.4
同样的错误
>>> import pyside
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named pyside
在尝试重新导入 matplotlib(我认为)时,在某个时候也遇到了以下错误。
from . import cache
ImportError: cannot import name cache
正如 Matplotlib virtualenv FAQ, vext
中所指出的,这里是解决方案。
例如,它允许使用系统范围的 pyqt5。
在 PyQt5 安装程序了解 virtualenvs 之前,这是必需的:
pip3 install vext.pyqt5
只要在最后加上plt.show(),问题就解决了。
我正在尝试在 matplotlib 中显示图像的 x y z 坐标。 the example code 在全局 python 安装上运行良好:当我移动光标时,x、y、z 值会立即更新。然而,当我 运行 在 python 虚拟环境中的示例代码时,我会点击图像几次以使坐标首先显示,然后当我点击不同的位置时它会更新对于一些。点击几下后,坐标将不再更新。
我不知道如何调试它。
这可能是 matplotlib 的 macosx 后端的问题。切换到使用 matplotlib 的替代后端(例如,使用 qt4 而不是 'macosx')。有关如何切换后端及其确切含义的详细信息 - 请参阅 the docs here。请注意,您可能必须先安装后端 - 例如pyqt
按照我在这里的建议使用 qt4agg
后端。
总而言之 - 后端处理来自 matplotlib 的输出,而 matplotlib 可以针对不同的输出格式。这些可以是 gui 显示输出格式(例如 wx
、qt4
等)或文件输出(例如 pdf
)。这些分别称为交互式和非交互式后端。
要更改后端,请执行
import matplotlib
matplotlib.use('qt4agg')
在代码中,或者 - 如果您想在每次启动 matplotlib 时进行更改 - edit your matplotlibrc file 设置后端属性,例如
backend: Qt4Agg
N.B。一条评论提醒我,自发布此答案以来,matplotlib 文档现在提到此问题和 suggest a workaround,尽管评论者指出此答案中提供的解决方案(切换到 Qt 后端)在官方文档中对他们有效解决方法对他们来说是不可能的。
最终对我有用的是制作一个包含指令的本地 matplotlibrc
文件:backend: TkAgg
.
# Within working directory where running python
vim matplotlibrc
# new file via vim, Nano, whatever
backend: TkAgg
import matplotlib
print matplotlib.rcParams['backend']
其他注意事项:
我还使用 Homebrew (brew install pyqt
) 安装了 pyqt 并从 /usr/local/lib/python2.7/site-packages/PyQt4
$MyVirtEnv/lib/python2.7/site-packages/
但是当我
import matplotlib
matplotlib.use('qt4Agg')
import librosa
"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.
也试过
pip install pyside
Successfully installed pyside-1.2.4
同样的错误
>>> import pyside
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named pyside
在尝试重新导入 matplotlib(我认为)时,在某个时候也遇到了以下错误。
from . import cache
ImportError: cannot import name cache
正如 Matplotlib virtualenv FAQ, vext
中所指出的,这里是解决方案。
例如,它允许使用系统范围的 pyqt5。
在 PyQt5 安装程序了解 virtualenvs 之前,这是必需的:
pip3 install vext.pyqt5
只要在最后加上plt.show(),问题就解决了。