Matplotlib使用qt4agg后端时无法通过pyplot.show()打开绘图,并且找不到sip。

3
我有一个和这个问题非常相似的问题: matplotlib不显示我的图形,尽管我调用了pyplot.show() 我正在使用: Ubuntu 12.04; Python 3.4.1; Pycharm 3.4.1
因此,我在pyCharm中使用3.4.1解释器运行以下代码,但是图形没有出现:
import matplotlib.pyplot as p 
p.plot(range(20), range(20))
p.show()

我原以为是Pycharm的问题,因此我在终端上尝试了同样的操作。然而,图表仍未出现。

但是,由于Ubuntu已经预装了Python 2.7,我在终端和Pycharm上都进行了同样的操作,然后图表就出现了。

我发现需要修改matplotlibrc文件中的后端设置。我搜索了一下,发现应该使用qt4agg后端。在更改后端设置并尝试导入matplotlib.pyplot后,我得到了以下结果。

import matplotlib.pyplot as p
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/usr/local/lib/python3.4/dist-packages/matplotlib/pyplot.py", line 98, in <module>
_backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
File "/usr/local/lib/python3.4/dist-packages/matplotlib/backends/__init__.py", line 28, in pylab_setup
globals(),locals(),[backend_name],0)
File "/usr/local/lib/python3.4/dist-packages/matplotlib/backends/backend_qt4agg.py", line 13, in <module>
from .backend_qt4 import QtCore, QtGui, FigureManagerQT, FigureCanvasQT,\
File "/usr/local/lib/python3.4/dist-packages/matplotlib/backends/backend_qt4.py", line 25, in <module>
from .qt4_compat import QtCore, QtGui, _getSaveFileName, __version__
File "/usr/local/lib/python3.4/dist-packages/matplotlib/backends/qt4_compat.py", line 36, in <module>
import sip
ImportError: No module named 'sip'

因此,我使用以下命令安装了sip:

 sudo apt-get install python3-sip

出现了相同的错误。

我正在尝试找出SIP出了什么问题。但是,我有点困惑,任何帮助都将不胜感激。 谢谢


嗨,我是Python的新手,但我发现运行iptest有助于我识别需要安装的组件。我已经成功安装了ipython和notebook。顺便说一下,我正在使用Python 2.7。 - Roobie
你是如何设置后端的?GTK 后端应该可以工作。 - Padraic Cunningham
我进入了/usr/local/lib/python3.4/dist-packages/matplotlib/mpl-data并修改了matplotlibrc文件中的backend: gtk。现在我遇到了另一个错误:ImportError: No module named 'gobject',我已经通过sudo apt-get install python-gobject安装了它。 - adomasb
我复制了另一个例子。如果我保存我的图表,它就可以工作。我使用的代码来自matplotlib文档:from pylab import * t = arange(0.0, 2.0, 0.01) s = sin(2*pi*t) plot(t, s) xlabel('time (s)') ylabel('voltage (mV)') title('About as simple as it gets, folks') grid(True) savefig("test.png") show()因此,这个方法是有效的。但是,如果尝试运行没有savefig()的代码,则无法正常工作。 - adomasb
1个回答

1

好的,经过很多努力,我终于做到了。

首先,我的电脑上可能有三到四个不同版本的Python:Ubuntu默认的2.7、3.2、3.4.0和3.4.1。它们中的每一个都有不同版本的matplotlib(大多数为1.3.1)。所以,首先我清理了无用的Python版本(3.2、3.4)。

其次,我删除了所有可用的matplotlib目录。我使用matplotlib文档确定应该删除哪些文件夹才能完全删除它。(http://matplotlib.org/contents.html

之后,我从git克隆了最新的matplotlib版本(http://matplotlib.org/faq/installing_faq.html#install-from-git),并安装了它。此时的matplotlib版本是1.4。然后我尝试再次复制我的第一个示例,它可以正常工作。没有改变任何后端。

因此,干净的卸载和最新版本应该就可以解决问题。


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