Matplotlib 似乎需要 $DISPLAY 环境变量,这意味着正在运行的 X 服务器。 一些网络托管服务不允许运行 X 服务器会话。 有没有办法在没有运行 X 服务器的情况下使用 matplotlib 生成图形?
[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 的回答是一种(完全有效!)的方法,但您也可以在importing 之前 简单地调用matplotlib.use('Agg') __matplotlib.pyplot ,然后照常继续。
matplotlib.use('Agg')
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 后端。pdf 、ps、svg、agg、cairo 和 gdk 后端都可以在没有 X 服务器的情况下使用。但是,默认情况下只会构建 Agg 后端(我认为?),因此很有可能在您的特定安装中未启用其他后端。
或者,您可以将.matplotlibrc文件中的后端参数设置为自动matplotlib.pyplot使用给定的渲染器。
.matplotlibrc