在Python虚拟环境中,matplotlib示例代码无法正常工作。
在Python虚拟环境中,matplotlib示例代码无法正常工作。
我试图在matplotlib中显示图像的x y z坐标。在全局python安装上,示例代码工作得很好:当我移动光标时,x、y、z值会立即更新。然而,在python虚拟环境中运行示例代码时,我需要多次点击图像才能显示坐标,然后当我点击不同的位置时,它只会更新部分。几次点击后,坐标将不再更新。
我不知道如何调试这个问题。
问题出现的原因是macOS上的matplotlib后端可能存在问题。解决方法是切换到matplotlib的另一个后端(例如使用'qt4'代替'macosx')。关于如何切换后端以及其含义的详细信息,请参阅文档这里。请注意,您可能需要先安装后端(例如使用pyqt
来使用我在这里建议的qt4agg
后端)。
总结一下,后端处理matplotlib的输出,而matplotlib可以针对不同的输出格式进行操作。这些可以是图形界面显示输出格式(例如wx
,qt4
等),也可以是文件输出格式(例如pdf
)。这些分别被称为交互式和非交互式后端。
要更改后端,可以在代码中执行以下操作:
import matplotlib matplotlib.use('qt4agg')
或者-如果您想每次启动matplotlib时都更改后端-编辑您的matplotlibrc文件并设置后端属性,例如:
backend: Qt4Agg
注意:有一位评论者提醒我,自从发布这个答案以来,matplotlib文档现在提到了这个问题,并且提供了一个解决方法,尽管评论者指出,这个答案中提供的解决方法(切换到Qt后端)对他们有效,而官方文档中的解决方法对他们来说不可行。
对我有用(在使用brew安装pyqt之后)! matplotlib文档提供了更长的解决方法,但实际上我无法实现。 matplotlib.org/faq/virtualenv_faq.html
问题原因:
问题出现的原因是在Python虚拟环境中,matplotlib示例代码无法正常工作。其中一个原因是由于缺少必需的后端库,例如TkAgg、qt4Agg或PySide。另一个可能的原因是缺少特定的依赖库,例如PyQt4或PyQt5。
解决方法:
解决这个问题的方法是根据具体情况采取以下步骤:
1. 在工作目录中创建一个名为matplotlibrc的文件,并将backend设置为TkAgg。可以使用文本编辑器(如vim或Nano)创建该文件。
# 在运行Python的工作目录中 vim matplotlibrc # 使用vim、Nano或其他编辑器创建新文件 backend: TkAgg
2. 确认matplotlib的后端设置是否已更改为TkAgg。可以使用以下代码进行验证:
import matplotlib print matplotlib.rcParams['backend']
如果输出为TkAgg,则说明更改已成功生效。
3. 如果已经安装了依赖库pyqt(例如使用Homebrew命令`brew install pyqt`),则需要将其复制到Python虚拟环境的site-packages目录下。可以使用以下命令将其复制到相应目录:
cp -r /usr/local/lib/python2.7/site-packages/PyQt4 $MyVirtEnv/lib/python2.7/site-packages/
其中`$MyVirtEnv`是Python虚拟环境的路径。
4. 如果尝试使用qt4Agg后端仍然出现错误,并且错误信息中提到缺少PyQt4、PyQt5或PySide包,则需要安装相应的包。可以使用pip命令安装pyside:
pip install pyside
如果安装成功,则可以继续使用qt4Agg后端。
5. 如果安装pyside后仍然出现“No module named pyside”的错误,则可能是由于包名大小写不匹配导致的。可以尝试使用以下命令导入正确的包:
import PySide
6. 如果在重新导入matplotlib时出现“cannot import name cache”的错误,则可能是由于缺少其他依赖库或库文件损坏导致的。可以尝试重新安装matplotlib或检查其他依赖库的安装情况。
通过以上步骤,可以解决在Python虚拟环境中使用matplotlib示例代码时出现的问题。