Matplotlib在虚拟环境中无法显示图形

16

我已经在虚拟环境中使用pip安装了matplotlib,现在我想绘制一个简单的图形。我使用Eclipse和PyDev。当我从Eclipse中运行脚本时,根本没有显示任何图形。我尝试了其他问题中提出的建议,比如添加plt.ion(),但也没有起作用。我还尝试在控制台中运行相同的代码,但仍然没有显示。这是我的配置问题吗?如果是,怎样才能解决它?

出错的代码如下:

    import matplotlib.pyplot as plt
    radius = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]
    area = [3.14159, 12.56636, 28.27431, 50.26544, 78.53975, 113.09724]
    plt.plot(radius, area)
    plt.show()

代码没有问题。在virtualenv之外它可以很好地运行。问题出现在我在virtualenv中使用它时。问题与我的配置有关。为了澄清事情,我没有收到任何错误消息。只是窗口不会显示出来。

谢谢


你可以开始展示代码失败的部分。 - joaquin
1
感谢您的编辑。据我现在所理解的,您的问题有些误导性,因为它似乎表明问题也与PyDev有关。如果您可以排除Eclipse-PyDev作为问题(可能在控制台或IDLE上运行而不是PyDev),您应该修改标题和标签,将PyDev更改为Virtualenv。这将帮助正确的人查看问题。 - joaquin
它是怎么失败的?有出现错误信息吗? - Tyler Liu
没有任何错误。脚本运行得很好。但是它不会呈现出带有图形的窗口。当我在虚拟环境之外使用控制台时,一切都很好。但是当我在虚拟环境中时,就没有窗口了。 - George Eracleous
1
你尝试过--system-site-packages选项吗? - Tianyang Li
1
如果您使用的是Agg后端,则会出现这种行为,该后端只能输出图像而无法生成窗口。正如您所观察到的那样,plt.show()将保持沉默,但是如果您使用plt.figure().show(),则可以强制发出警告:UserWarning: matplotlib is currently using a non-GUI backend, so cannot show the figure - Nick T
5个回答

9

您的代码在我的OSX 10.7上的Python 2.7虚拟环境中运行良好:

enter image description here

您在虚拟环境中使用的Python版本是什么?我猜测您可能没有安装matplotlib依赖项,或者您已安装的依赖项未正确执行安装。在Python 2.7下,以下是我安装matplotlib的步骤。您能否尝试在一个新的虚拟环境中执行这些步骤,并查看是否可行?

pip install numpy
pip install scipy
easy_install matplotlib

1
我会尝试这个(虽然我已经安装了numpy和scipy),但是为什么你用easy_install安装matplotlib而用pip安装其他的呢? - George Eracleous
我以前使用pip安装matplotlib时遇到过问题。 - drbunsen
嘿..它起作用了:)..问题一直是我没有使用easy_install来安装matplotlib。显然pip存在问题!感谢您的答案! - George Eracleous
救了我的一天。谢谢! - Greg0ry

9
我遇到了同样的问题,使用pip安装 matplotlib 无法解决。最终,我发现问题很简单,即matplotlib找不到任何绘图后端。
我通过以下方式解决了这个问题(我使用Debian wheezy):
pip uninstall matplotlib
sudo apt-get install tcl-dev tk-dev
pip install matplotlib

1
就是这么简单!(适用于标准的Ubuntu 14.04 LTS) - Mahé
有没有类似这么简单的OSX解决方案? - Charlie Parker

6
首先,您可能想查看以下内容:http://matplotlib.org/faq/installing_faq.html#matplotlib-compiled-fine-but-nothing-shows-up-when-i-use-it。为了了解出现的问题,我们将使用git而不是pip或easy_install进行更手动的安装。
git clone git@github.com:matplotlib/matplotlib.git
cd matplotlib
python setup.py

这将打印出 pip 或 easy_install 可能执行的配置。查看“可选后端依赖项”,确保启用了一些生成窗口的依赖库(如 Tkinter、Gtk+、Mac OS X 原生、Qt、Cairo 等)。如果您发现没有其中任何一个可用,则需要在继续安装 matplotlib 之前为您的操作系统安装这些库。
例如,在安装了 Tk 之后(在 ubuntu 上:sudo apt-get install tcl-dev tk-dev),再次运行命令即可。
python setup.py

您将会看到Tk后端已经启用。继续进行。

python setup.py build && python setup.py install

这应该可以让你开始使用...但此时你甚至可以删除整个git克隆目录并返回使用pip进行安装。


它对我起作用了。我使用pip而不是easy_install进行安装。 - jgomo3
在我的环境中,神奇的是,全局的matplotlib包可以很好地使用TkAgg,但是tcl-devtk-dev都没有安装。解决这个问题后,问题得到了解决。使用easy_installpip并没有什么区别。然而,在安装Tk/Tcl包之前,我的虚拟环境设置仍然能够使用Tk python模块并绘制窗口... - Nick T
tcl在虚拟环境中的问题已有记录,但似乎尚未得到解决。请参见virtualenv的此票。对于我来说,修改activate.bat以设置基本python安装中TCL文件的路径是解决它的建议。 - turtlemonvh

4
如果您的系统上安装了matplotlib版本的python,则可以链接到系统版本的matplotlib。在我的计算机上,我执行了以下操作:
cd $VIRTUAL_ENV/lib/python2.7/site-packages
ln -s /usr/lib/pymodules/python2.7/matplotlib .
ln -s /usr/lib/pymodules/python2.7/matplotlib-1.1.1rc .

这样做避免了许多在虚拟环境中使用matplotlib时的问题,但限制您只能使用系统版本的matplotlib(该机器上的版本还不错)。

此方法还允许您使用--no-site-packages选项,但仍然可以使用matplotlib。


2

我正在使用计算机上的Ubuntu 12.04和Python 2.7.3,当我在虚拟环境中使用matplotlib 1.2.0时,show()函数无法正常工作,直到我将其升级到1.2.1版本,之前出现的所有错误都消失了...

通过这样做,您将安装所有matplotlib的依赖项:

sudo apt-get build-dep python-matplotlib

要获取最新版本的matplotlib,您可以使用以下方法:

pip install matplotlib

或者升级它:

pip install matplotlib --upgrade

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