生成没有运行X服务器的matplotlibgraphics

Matplotlib似乎需要$ DISPLAY环境variables,这意味着一个正在运行的X服务器。
一些虚拟主机服务不允许正在运行的X服务器会话。
有没有办法使用matplotlib生成没有运行X服务器的graphics?

[username@hostname ~]$ python2.6 Python 2.6.5 (r265:79063, Nov 23 2010, 02:02:03) [GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import matplotlib.pyplot as plt >>> fig = plt.figure() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/username/lib/python2.6/matplotlib-1.0.1-py2.6-linux-i686.egg/matplotlib/pyplot.py", line 270, in figure **kwargs) File "/home/username/lib/python2.6/matplotlib-1.0.1-py2.6-linux-i686.egg/matplotlib/backends/backend_tkagg.py", line 80, in new_figure_manager window = Tk.Tk() File "/usr/local/lib/python2.6/lib-tk/Tkinter.py", line 1643, in __init__ self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use) _tkinter.TclError: no display name and no $DISPLAY environment variable >>> 

@尼尔的答案是一个(完全有效!)的方式,但你也可以简单地导入matplotlib.pyplot 之前调用matplotlib.use('Agg') ,然后继续正常。

例如

 import matplotlib as mpl mpl.use('Agg') import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) ax.plot(range(10)) fig.savefig('temp.png') 

您也不必使用Agg后端。 pdf,ps,svg,agg,cairo和gdk后端都可以在没有X服务器的情况下使用。 但是,只有Agg后端将默认生成(我认为?),所以很有可能其他后端可能不会在您的特定安装上启用。

或者,您可以在.matplotlibrc文件中设置后端参数,以自动使matplotlib.pyplot使用给定的渲染器。

您需要直接使用matplotlib API,而不是通过pylab接口。 这里有一个很好的例子:

http://www.dalkescientific.com/writings/diary/archive/2005/04/23/matplotlib_without_gui.html