在没有运行 X 服务器的情况下生成 matplotlib 图形[重复]
- 2025-03-18 08:54:00
- admin 原创
- 60
问题描述:
Matplotlib 似乎需要 $DISPLAY 环境变量,这意味着正在运行 X 服务器。
某些 Web 托管服务不允许运行 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
>>>
解决方案 1:
@Neil 的答案是一种(完全有效的!)方法,但您也可以在导入之前简单地调用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-server 的情况下使用。但是,默认情况下只会构建 Agg 后端(我想是吧?),因此很有可能您的特定安装中不会启用其他后端。
或者,您只需在文件中设置后端参数.matplotlibrc
即可自动matplotlib.pyplot
使用给定的渲染器。
解决方案 2:
您需要直接使用 matplotlib API,而不是通过 pylab 接口。这里有一个很好的例子:
http://www.dalkescientific.com/writings/diary/archive/2005/04/23/matplotlib_without_gui.html
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD