生成没有运行的X服务器的matplotlib图

问题:

Matplotlib似乎需要$ DISPLAY环境变量,这意味着运行的X服务器。
某些Web托管服务不允许运行的X服务器会话。
有没有办法使用matplotlib生成图形,而不用运行X服务器?

[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
>>>

回答:

@ Neil的答案是一个(完全有效的)方法,但你也可以simply call matplotlib.use('Agg') before importing matplotlib.pyplot,然后继续正常。
例如。

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后端。无需X服务器就可以使用pdf, ps, svg, agg, cairo, and gdk backends。但是,只有Agg后端将默认构建(我想?),所以很有可能其他后端可能无法在您的特定安装启用。
或者,您可以将.matplotlibrc文件中的后端参数设置为自动使用给定的渲染器matplotlib.pyplot

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Generating matplotlib graphs without a running X server

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 1 = 4