【问题标题】:matplotlib example code not working on python virtual environmentmatplotlib 示例代码不适用于 python 虚拟环境
【发布时间】:2023-04-05 14:56:01
【问题描述】:

我正在尝试在 matplotlib 中显示图像的 x y z 坐标。 the example code 在全局 python 安装中运行良好:当我移动光标时,x、y、z 值会立即更新。但是,当我在 python 虚拟环境中运行示例代码时,我会多次单击图像以首先显示坐标,然后当我单击不同的位置时,它会更新一些。单击几下后,坐标将不再更新。

我不知道如何调试。

【问题讨论】:

  • 如果代码是一样的,那么无论是哪个包还是python版本都应该有区别。在全局和虚拟环境中使用pip freeze 并进行比较。还要查看python版本本身是否相同。也可能是matplotlib使用了不同的后端,所以还要检查matplotlib.get_backend()
  • python版本是一样的。 matplotlib 是不同的。我从我的 virtualenv 中卸载了它,并安装了在我的全局 python 中找到的相同版本。但是,问题仍然存在。 @swenzel
  • 后端怎么样?
  • 我为@swenzel 准备了 MacOSX。
  • 一种可能的尝试是为 matplotlib 使用替代后端 matplotlib.org/faq/usage_faq.html#what-is-a-backend(例如,使用 qt4 而不是 'macosx')

标签: python macos matplotlib virtualenv


【解决方案1】:

这可能是 matplotlib 的 macosx 后端的问题。切换到使用 matplotlib 的替代后端(例如,使用 qt4 而不是 'macosx')。有关如何切换后端及其具体含义的详细信息 - 请参阅the docs here。请注意,您可能必须先安装后端 - 例如pyqt 按照我的建议使用 qt4agg 后端。

总之 - 后端处理来自 matplotlib 的输出,而 matplotlib 可以针对不同的输出格式。这些可以是 gui 显示输出格式(例如 wxqt4 等),或文件输出(例如 pdf)。这些分别称为交互式和非交互式后端。

要更改后端,要么做

import matplotlib
matplotlib.use('qt4agg')

在代码中,或者 - 如果你想在每次启动 matplotlib 时更改 - edit your matplotlibrc file 设置后端属性,例如

backend: Qt4Agg

注意一条评论提醒我,自从发布此答案以来,matplotlib 文档现在引用了此问题和suggest a workaround,尽管评论者指出此答案中提供的解决方案(切换到 Qt 后端)对他们有效,而官方文档解决方法是他们不可能。

【讨论】:

【解决方案2】:

最终对我有用的是创建一个包含指令的本地 matplotlibrc 文件:backend: TkAgg

# Within working directory where running python
vim matplotlibrc
# new file via vim, Nano, whatever
backend: TkAgg

This 很有用:

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

【讨论】:

    【解决方案3】:

    正如Matplotlib virtualenv FAQ 中指出的,vext 是这里的解决方案。

    例如,它允许使用系统范围的 pyqt5。

    在 PyQt5 安装程序知道 virtualenvs 之前这是必需的:

    pip3 install vext.pyqt5
    

    【讨论】:

      【解决方案4】:

      只需在末尾添加 plt.show() ,问题就为我解决了。

      【讨论】:

      • 这实际上是一个纯代码的答案。您想通过添加解释来帮助消除人们认为 StackOverflow 是免费代码编写服务的误解吗?
      猜你喜欢
      • 1970-01-01
      • 2018-12-29
      • 2018-07-04
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      相关资源
      最近更新 更多