为什么我不能在repl.it上使用Python绘图

时间:2017-04-17 13:08:09

标签: python python-3.x web-services matplotlib

出于实际原因,我想在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

这是什么意思?

1 个答案:

答案 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;以上产生:

matplotlib graph

(*)对于新脚本,首先单击新文件图标启用项目模式。它看起来像带有加号的文档,位于&#39;设置下方。 cog图标,位于编辑的行号上方。