python - 在没有运行 X 服务器的情况下生成 matplotlib 图

Matplotlib 似乎需要 $DISPLAY 环境变量,这意味着正在运行的 X 服务器。
一些网络托管服务不允许运行 X 服务器 session 。
有没有办法使用 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 后端。 pdf, ps, svg, agg, cairo, and gdk backends都可以在没有 X 服务器的情况下使用。但是,默认情况下只会构建 Agg 后端(我认为?),因此很有可能在您的特定安装中未启用其他后端。

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

https://stackoverflow.com/questions/4931376/

相关文章:

linux - 如何在linux中列出空文件夹

python - Django:为什么有些模型字段会相互冲突?

datetime - 组合 datetime.date 和 datetime.time 对象的 Py

linux - 如何从命令行检查 SMTP 是否正常工作(Linux)

linux - 如何使用文件的行作为命令的参数?

python - 如何在 python 中发送带有请求的 "multipart/form-data"

linux - 使用 sudo 时找不到命令

python - 将 [key1,val1,key2,val2] 转换为字典?

python - 如何卸载使用 pip install --user 安装的软件包

linux - 如何使用 grep 在当前目录中搜索具有字符串 "hello"但仅显示 .h 和 .