出于实际原因,我想在repl.it上测试一小段Pyton代码(基于web,因此我不需要安装Python)。
代码
import numpy as np
import matplotlib.pyplot as plt
time = np.array([0, 1, 2, 3])
vec = np.array([1, 4, 3, -2])
plt.plot(time, vec)
给出以下错误:
[GCC 4.8.2] on linux
Traceback (most recent call last):
File "main.py", line 16, in <module>
plt.figure()
File "/goval_modules/python35/matplotlib/pyplot.py", line 535, in figure
**kwargs)
File "/goval_modules/python35/matplotlib/backends/backend_tkagg.py", line 84, in new_figure_manager
return new_figure_manager_given_figure(num, figure)
File "/goval_modules/python35/matplotlib/backends/backend_tkagg.py", line 92, in new_figure_manager_given_figure
window = Tk.Tk()
File "/usr/local/lib/python3.5/tkinter/__init__.py", line 1868, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable
exited with non-zero status
这是什么意思?
答案 0 :(得分:11)
matplotlib
默认选择交互式后端,在GUI中显示图表;默认是使用TkInter。请参阅matplotlib常见问题解答中的What is a backend。当在Web服务器上运行Python时,这不起作用,没有GUI服务器可以显示它。
您必须选择一个非交互式后端;支持Agg
并生成PNG。 Repl.it允许您保存文件本地&#39; (*):
import matplotlib as mpl
mpl.use('Agg')
import numpy as np
import matplotlib.pyplot as plt
time = np.array([0, 1, 2, 3])
vec = np.array([1, 4, 3, -2])
plt.plot(time, vec)
plt.savefig('graph.png')
运行此选项时,会出现一个额外的graph.png
标签,可让您下载结果。见live demo;以上产生:
(*)对于新脚本,首先单击新文件图标启用项目模式。它看起来像带有加号的文档,位于&#39;设置下方。 cog图标,位于编辑的行号上方。