matplotlib 不会绘制 python3

Posted

技术标签:

【中文标题】matplotlib 不会绘制 python3【英文标题】:matplotlib won't draw python3 【发布时间】:2012-10-08 13:04:42 【问题描述】:

我在 virtualenv 中成功安装了 matplotlib。现在我正试图让它画出来。我知道如何更改后端,但是在弄清楚将其更改为什么时遇到了很多麻烦。

有没有人设法让它完全与 python3 一起工作?如果是,怎么做?

我已经尝试了很多东西。我已经遍历了所有后端以查看所有投诉是什么,而不是试图让其中一个正常工作。

另外可能值得注意的是,我的目标是将它集成到 Pyramid 应用程序中。

这是迄今为止所有不同后端发生的情况:

Agg:这是默认后端。它不画 GTK:需要 pygtk,它显然没有被移植到 python3 GTKAgg:同上 GTKCairo:说“必需的包 gtk”假设类似于上述内容 FltkAgg:看起来它没有 python3 版本。尽管它在 python3 UI FAQ 中被提及。我想那只是一个刺激。天哪 MacOSX:我正在运行 ubuntu。假定不当 QtAgg:需要 pyqt。见 Qt4Agg Qt4Agg:见Installing PyQt4 in a virtualenv TkAgg:ImportError:无法导入名称 _tkagg。我可以在解释器中运行 import tkinter,所以我还不确定是什么损坏了 WX: ImportError: Matplotlib backend_wx 和 backend_wxagg 需要 wxversion,但未找到 WXAgg:同上 CocoaAgg:ImportError:CococaAgg 后端需要安装 PyObjC! GTK3Cairo : ImportError: GTK3 后端需要安装 pygobject。我尝试安装它,但是当我尝试使用正确的 python 配置它时,它抱怨缺少标题 GTK3Agg:没有名为 cairo 的模块。但我认为我会遇到与上述相同的问题 cairo:Cairo 后端要求安装 pycairo emf:必须先从http://pyemf.sf.net安装pyemf。看起来它应该做 windowsey 的东西所以这可能不是一个好的选择 gdk:没有名为 gobject 的模块 pdf:运行但不绘制 pgf:同上 ps:同上 svg:同上 模板:同上。

我用来测试后端的脚本是:

import matplotlib.pyplot as plt
plt.plot([1,2,3,4])
plt.show()

到目前为止,我已经花了太多时间试图让 python3.2 和 qt4 玩得很好,而且我似乎每次转身都遇到了问题。因此,我不想继续我的试错方法,而是想问:

    Python3.2 和 Pyramid 的最佳选择是什么? 如何实现?

与此同时,我将继续试错,并随时更新我的​​问题。

关于我正在尝试的东西的注意事项

对于 TkAgg:

由于 tkinter 正确导入,我假设它已正确安装(如果我错了,我想有办法测试它吗?)。这个人http://ask.sagemath.org/question/626/sage-python-import-matplotlib-no-module-named 也有类似的问题,但我确定他的设置与我的不同。解决方案是在 python3.2 站点包目录的内部找到 tkagg.py 并编辑有问题的导入语句。我发现很难相信 matplotlib 的交付失败了(而且我无法运行建议的修改后的代码......)

对于 WX 的东西:

wxPython for Python 3 表示尚不支持 python3。 wxPython 在他们的网站上也没有提到 python3,所以我想这是不行的。选项用完了:/

可可:

同上:Writing Cocoa applications in Python 3

电磁场:

同上:http://pyemf.sourceforge.net/README.html

【问题讨论】:

当你说例如agg“不画”是什么意思? @JouniK.Seppänen:绝对没有任何反应。没有错误,没有图表,什么都没有 由于大多数后端似乎都会发生这种情况,我认为问题出在您的绘图代码上。八个不同的后端似乎不太可能都有错误,导致它们运行时没有错误,但会导致输出为空。 @JouniK.Seppänen:你的意思是我用来测试后端的脚本吗?我使用的代码包括在内(就在强大的列表下方)。我认为这就是您的意思,否则您可能会暗示 matplotlib 损坏了。我用来测试后端的代码直接来自手册,我不是唯一一个遇到后端问题导致 draw 什么都不输出的人。我看到的一般建议是“改变你的后端” cairo、pdf 和那些类型的后端不适用于交互式绘图。不过,他们可以生成数字并将其保存到文件中。只需在脚本中使用 plt.savefig('test.pdf') 而不是 plt.show() 【参考方案1】:

我遇到了完全相同的问题,但经过大量努力,我设法使 TkAgg 正常工作(这导致 _tkagg 的导入错误)。有点晚了,但有人可能会觉得它很有用。

FWIW 我将问题解决如下(使用 TkAgg):

从包管理器安装tk-dev 重新安装 python3-tk 来自包管理器 重新构建并重新安装 matplotlib 来自源代码 (当然还有在 matplotrc 中设置 TkAgg)

如果您认为您已经正确安装了tk-devpython3-tk,您需要重新构建并重新安装matplotlib,以便它在您的@ 中生成_tkagg.py 987654327@目录。

我在 LM14 上使用 Python3.3 (numpy 1.7)。但我认为它应该适用于 Ubuntu/Python3.2

【讨论】:

我使用的是pyenv,安装tk-devpython3-tk后必须重新安装python,否则效果很好【参考方案2】:

我一直在做 python 3.3.2 和 matplotlib 的源代码构建。如上所述,TkAgg 有效。如果您从源代码构建所有内容:

    sudo apt-get install tk-dev 重建 python3 (make clean; ./configure; make) 清理 matplotlib(从 virtualenv 中删除 egg,从 ~/.config/matplotlib 中删除缓存对象) 从源代码重建 matplotlib (rm -r build/; python setup.py build; python setup.py install)

终于看到那个愚蠢的盒子弹出我的 x=y 行。

小时....

【讨论】:

【参考方案3】:

Matplotlib 似乎向 Python 3 迈出了一大步,他们的 1.2.x release。 matplotlib 1.2.0rc2 (+ numpy 1.7.0b2) 正在为我工​​作

Python 3.2.2(Linux Mint 12 上的虚拟环境) Python 3.3.0(从源本地安装)

在这两种情况下,matplotlib 都将“TkAgg”报告为使用的后端。

不幸的是,我不知道这是否/如何与 Pyramid 一起使用。

【讨论】:

【参考方案4】:

我写了一个答案,以确保在 Ubuntu 16.04 的 Python 3 virtualenv 中 matplotlib 使用 https://askubuntu.com/a/785506/15003 的 TkAgg 后端,这在这里很有用。结果是安装tk-dev,激活virtualenv并在virtualenv中重新安装matplotlib

sudo apt install tk-dev
source venv/bin/activate
pip --no-cache-dir install -U --force-reinstall matplotlib

python -c 'import matplotlib as mpl; print(mpl.get_backend())' 现在应该说 TkAgg

【讨论】:

【参考方案5】:

对我来说,以下工作:

停用, sudo apt-get install python3-matplotlib libfreetype6-dev (激活 virtualenv)源 /home/..., pip install numpy matplotlib(如果您已经拥有它,可以卸载然后安装,或者此时尝试创建一个新的 venv) pip install --upgrade pip inside venv 也可能会有所帮助(出于某种我不知道的原因),就像我安装 scipy 时一样。

它现在使用 virtualenv 进行绘图。

$ lsb_release -a (gives..)

Ubuntu 14.04.5 LTS

【讨论】:

以上是关于matplotlib 不会绘制 python3的主要内容,如果未能解决你的问题,请参考以下文章

Matplotlib - 同时绘制 3D 平面和点

tkinter 和 matplotlib:在 Linux 下程序关闭之前不会显示窗口

Matplotlib FigureCanvas:正确地将 Quadmesh 绘制成轴

Matplotlib - 点不会出现,但线会

绘制/计算指数曲线的问题(python、matplotlib、pandas)

在 PyQt 窗口中无延迟地绘制 matplotlib 矩形