我的ipython中的图表在使用pyplot.show()命令后没有显示。

198
需要帮助在ipython中显示matplotlib图表。我没有忘记调用pyplot.show()

$ ipython --pylab

import matplotlib.pyplot as plt
plt.plot(range(20), range(20))

它将返回matplotlib.lines.Line2D at 0xade2b2c作为输出。

plt.show()

没有任何反应。没有错误信息。没有新窗口。我使用pip安装了matplotlib,并且没有出现错误信息。

细节:

我使用:

  • Ubuntu
  • IPython v0.11
  • Python v2.6.6
  • matplotlib v1.0.1

pylab已经过时。绘图的推荐方式是matplotlib还是pylab?请忽略带有pylab的答案。 - Trenton McKinney
18个回答

190
如果我在~/.matplotlib/matplotlibrc中将后端设置为template,那么我就能够复现你的症状:

~/.matplotlib/matplotlibrc:

# backend      : GtkAgg
backend      : template

请注意,文件matplotlibrc可能不在 ~/.matplotlib/目录中。如果是这种情况,则以下代码显示其位置:

>>> import matplotlib
>>> matplotlib.matplotlib_fname()

In [1]: import matplotlib.pyplot as p

In [2]: p.plot(range(20),range(20))
Out[2]: [<matplotlib.lines.Line2D object at 0xa64932c>]

In [3]: p.show()
如果您编辑 ~/.matplotlib/matplotlibrc 并将后端更改为类似于GtkAgg 的内容,则应该会看到一个图。 您可以使用以下命令列出机器上所有可用的后端:
import matplotlib.rcsetup as rcsetup
print(rcsetup.all_backends)

它应该返回一个类似于以下的列表:

['GTK', 'GTKAgg', 'GTKCairo', 'FltkAgg', 'MacOSX', 'QtAgg', 'Qt4Agg',
'TkAgg', 'WX', 'WXAgg', 'CocoaAgg', 'agg', 'cairo', 'emf', 'gdk', 'pdf',
'ps', 'svg', 'template']

参考资料:


2
我尝试了,但是出现了一个错误,类似于:“ImportError: No module named _backend_gdk”。 - Baskaya
6
抱歉留了很多评论。它有效了。我尝试了Qt4Agg并成功了。谢谢 :) 最后一个问题,我在哪里可以找到默认的matplotlibrc文件,或者有没有创建它的方法? - Baskaya
8
这个答案已经过时了,配置文件现在应该位于~/.config/matplotlib/matplotlibrc(至少对于Python 3来说是这样)。我刚遇到了一个相关的问题,我认为这是由于在Python 2.7中使用matplotlib创建了一个~/.matplotlib/目录,阻止了Python 3读取~/.config/matplotlib/中的配置。删除~/.matplotlib/解决了我的问题。 - naught101
这里有一个非常好的"如何"链接:http://www.pyimagesearch.com/2015/08/24/resolved-matplotlib-figures-not-showing-up-or-displaying/ - floatingpurr
您好,backend参数的可能值已过时。在matplotlib 3.4.2和Python3中,这些是允许的:对于backend;支持的值为['GTK3Agg'、'GTK3Cairo'、'MacOSX'、'nbAgg'、'Qt4Agg'、'Qt4Cairo'、'Qt5Agg'、'Qt5Cairo'、'TkAgg'、'TkCairo'、'WebAgg'、'WX'、'WXAgg'、'WXCairo'、'agg'、'cairo'、'pdf'、'pgf'、'ps'、'svg'、'template'] - Christian
显示剩余4条评论

75

我在Ubuntu 12.04上遇到了完全相同的问题,因为我使用以下命令(在虚拟环境中)安装了matplotlib:

pip install matplotlib
简而言之,我的建议是:不要尝试使用pip或手动方式安装matplotlib;让一个真正的包管理器(例如apt-get/synaptic)为您安装它及其所有依赖项。
不幸的是,matplotlib的后端(实际渲染图形的替代方法)有各种各样的依赖关系,而pip将无法处理。更糟糕的是,它会默默地失败;也就是说,pip install matplotlib似乎会成功安装matplotlib。 但是当您尝试使用它时(例如pyplot.show()),没有绘图窗口会出现。我尝试了网络上人们建议的所有不同后端(Qt4Agg、GTK等),它们都失败了(即当我尝试导入matplotlib.pyplot时,我会得到ImportError,因为它试图导入一些缺失的依赖项)。然后我研究了如何安装这些依赖项,但它只让我想放弃使用pip(在virtualenv中)作为具有非Python包依赖性的任何软件包的可行安装解决方案。
整个经历使我回到了apt-get / synaptic(即Ubuntu软件包管理器),以安装像matplotlib这样的软件。那完全奏效。当然,这意味着您只能安装到系统目录中,没有虚拟环境优势,并且您被困在Ubuntu分发的版本上,这可能落后于当前版本……

5
你尝试过使用 --system-site-packages 这个选项了吗? - Tianyang Li
1
Christopher Lee,图形没有显示且没有任何错误/其他投诉的问题是因为当您进行pip install时,默认后端是agg。我不确定为什么,但是您可以根据unutbu的答案进行更改。 pip的主要优点是安装最新版本-apt安装过时版本。有时,您需要的是错误修复/新功能。 - drevicko
2
只是停用 virtualenv 就可以了!我能够在 Ubuntu 上从源代码系统范围内安装 matplotlib 1.4,但不能在 virtualenv 下安装。 - Sergey Orshanskiy
太棒了!你的回答真的帮了很多!"pip uninstall ...","apt-get install ..."解决了问题! - Alexey
1
那么对于我们这些被困在Windows工作机器上无法使用apt-get的人来说,有什么解决方案呢? - ale19
显示剩余3条评论

47
在绘图之前,��笔记本添加%matplotlib inline

我需要在笔记本上使用%pylab inline,正如@Bhanu Pratap Singh所指出的那样。 - Reed Sandberg
一个Jupyter笔记本? - user_loser

13

只需输入:

plt.ion()

查看 https://www.youtube.com/watch?v=1zmV8lZsHF4 的 23:30 时间点!

plt 的使用是因为我的导入: import matplotlib.pyplot as plt

我在使用 Python 2.7,在 Mac 上使用 iTerm2。


11

为了以后参考,

我遇到了同样的问题——在ipython下pylab未显示。 通过更改ipython的配置文件 {ipython_config.py} 可以解决这个问题。在配置文件中

c.InteractiveShellApp.pylab = 'auto'

我将“auto”更改为“qt”,现在我可以看到图形


5
使用 "ipython --pylab=qt" 命令。 - andrew cooke
这个方法可以用,但它只是一个部分解决方案:如果你的默认后端是agg,我认为 %pylab inline 是行不通的,当你直接运行脚本时也不会显示图表,比如 python myscript.py。unutbu的答案应该可以在任何情况下解决这个问题。 - drevicko

10
我解决问题的方法是在Jupyter Notebook顶部使用以下两行代码:
%matplotib inline
%pylab inline

它有效了。我正在使用Ubuntu16.04和ipython-5.1。


虽然这篇博客文章抨击了pylab,但你会明白为什么添加%pylab inline可以使它工作。 - Bhanu Pratap Singh
pylab已经过时了。哪种绘图方法是推荐的:matplotlib还是pylab? - Trenton McKinney

3
在导入pylab之前添加以下两行代码似乎对我有效。
import matplotlib
matplotlib.use("gtk")

import sys
import pylab
import numpy as np

2

1
运行得很好,只使用了git clone和python setup步骤,但是当我使用plt.show()运行时没有问题。 - Steve
当我尝试运行 python setup.py install 时,我收到了编译器错误 :/ 我希望我能看到这该死的窗口! - user_loser

2
与@Rikki类似,我通过使用pip install matplotlib --upgrade升级matplotlib来解决了这个问题。如果无法升级,则卸载和重新安装可能有效。
pip uninstall matplotlib
pip install matplotlib

1
在运行您的代码后,请包含以下内容:
import pylab as p
p.show()

pylab已经过时。绘图的推荐方式是matplotlib还是pylab? - Trenton McKinney

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