Python虚拟环境中Matplotlib示例代码无法运行

3
我正在尝试在matplotlib中显示图像的x、y、z坐标。 示例代码 在全局python安装上运行得非常好:当我移动光标时,x、y、z值会立即更新。然而,当我在python虚拟环境中运行示例代码时,我需要多次单击图像才能显示坐标,然后当我单击不同位置时,它只会更新一些。几次单击后,坐标将不再更新。
我不知道如何调试这个问题。

4
如果代码相同,那么在任何包或Python版本中都应该有差异。在全局环境和虚拟环境中都使用 pip freeze 命令并进行比较。同时查看Python版本是否相同。也有可能是Matplotlib使用了不同的后端,因此还要检查 matplotlib.get_backend() 命令。 - swenzel
Python版本是一样的,Matplotlib不同。我已经从虚拟环境中卸载了它,并安装了在全局Python中找到的相同版本。然而,问题仍然存在。@swenzel - MAS
1
后端怎么样? - swenzel
我为@swenzel获取了MacOSX。 - MAS
1
一个可能尝试的方法是使用matplotlib的另一种后端(例如使用qt4而不是'macosx')。 - J Richard Snape
显示剩余3条评论
4个回答

17
这可能是由于matplotlib的macosx后端造成的问题。切换到使用matplotlib的替代后端(例如,使用qt4而不是“macosx”)。有关如何切换后端以及具体含义的详细信息,请参见此处的文档。请注意,您可能需要首先安装后端 - 例如,pyqt以使用我在此建议的qt4agg后端。
总之,后端处理matplotlib的输出,而matplotlib可以针对不同的输出格式进行目标设置。这些可以是GUI显示输出格式(例如wxqt4等),也可以是文件输出(例如pdf)。它们分别称为交互和非交互式后端。
要更改后端,请执行以下操作
import matplotlib
matplotlib.use('qt4agg')

在编程中,如果您想要更改每次启动matplotlib的设置,可以通过编辑您的matplotlibrc文件来设置后端属性,例如编辑您的matplotlibrc文件

backend: Qt4Agg

注意:有评论提醒我,自从发布这个答案后,matplotlib文档现在提到了这个问题并 建议一种解决方法。不过评论者指出,在官方文档的解决方法对他们无效时,本答案提供的解决方法(切换到Qt后端)对他们有效。


在使用brew安装了pyqt之后对我很有用!Matplotlib文档提供的解决方法要复杂得多,但实际上我并不能成功实践。http://matplotlib.org/faq/virtualenv_faq.html - SeF

0
只需在结尾处添加plt.show(),问题就解决了。

1
这实际上是一个仅包含代码的答案。您是否想通过添加解释来帮助打破 StackOverflow 是一个免费代码编写服务的误解? - Yunnosch

0
最终对我有用的方法是创建一个本地的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安装了pyqt (brew install 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

0
Matplotlib virtualenv FAQ所指出的那样,vext是解决方案。
例如,它允许使用系统范围内的pyqt5。
在PyQt5设置了解虚拟环境之前,这是必要的。
pip3 install vext.pyqt5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接