我的ipython图形不通过pyplot.show()显示
我需要帮助,在 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
17 个回答
在绘图之前,先在笔记本中添加一次 %matplotlib inline
。
我在Ubuntu 12.04上遇到了完全一样的问题,因为我在一个虚拟环境中用
pip install matplotlib
安装了matplotlib。简单来说,我的建议是:不要通过pip或者手动安装matplotlib;让真正的软件包管理器(比如apt-get或synaptic)来为你安装它和所有相关的依赖。
不幸的是,matplotlib的后端(也就是用来实际显示图表的不同方法)有很多依赖,而pip并不会处理这些依赖。更糟糕的是,它不会给你任何提示;也就是说,pip install matplotlib
看起来是成功安装了matplotlib。但当你尝试使用它(比如pyplot.show()
)时,根本不会出现图表窗口。我尝试了网上推荐的各种后端(Qt4Agg、GTK等),结果都失败了(也就是说,当我尝试导入matplotlib.pyplot时,出现了ImportError
,因为它试图导入一些缺失的依赖)。我接着研究如何安装这些依赖,但这让我更加想放弃在虚拟环境中用pip作为安装任何有非Python依赖的软件包的解决方案。
整个经历让我又回到了apt-get/synaptic(也就是Ubuntu的软件包管理器)来安装像matplotlib这样的软件。这次安装非常顺利。当然,这意味着你只能安装到系统目录里,无法享受虚拟环境的好处,而且你只能使用Ubuntu提供的版本,这些版本可能远远落后于当前的版本……
如果我把我的后端设置为 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']
参考资料: