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-dev
和python3-tk
,您需要重新构建并重新安装matplotlib,以便它在您的@ 中生成_tkagg.py
987654327@目录。
我在 LM14 上使用 Python3.3 (numpy 1.7)。但我认为它应该适用于 Ubuntu/Python3.2
【讨论】:
我使用的是pyenv,安装tk-dev
和python3-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的主要内容,如果未能解决你的问题,请参考以下文章
tkinter 和 matplotlib:在 Linux 下程序关闭之前不会显示窗口
Matplotlib FigureCanvas:正确地将 Quadmesh 绘制成轴