导入Matplotlib没有显示

spe*_*f10 7 python linux matplotlib

我试图在我的Linux服务器上运行python脚本并制作并保存一些图.我已经安装ipythonpylabmatplotlib,但后来当我运行我的脚本,我得到这个错误:

Traceback (most recent call last):
  File "/root/dining_hall_graph.py", line 14, in <module>
    from pylab import * 
  File "/usr/lib64/python2.7/site-packages/pylab.py", line 1, in <module>
    from matplotlib.pylab import *
  File "/usr/lib64/python2.7/site-packages/matplotlib/pylab.py", line 265, in <module>
    from matplotlib.pyplot import *
  File "/usr/lib64/python2.7/site-packages/matplotlib/pyplot.py", line 97, in <module>
    _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
  File "/usr/lib64/python2.7/site-packages/matplotlib/backends/__init__.py", line 25, in pylab_setup
    globals(),locals(),[backend_name])
  File "/usr/lib64/python2.7/site-packages/matplotlib/backends/backend_gtkagg.py", line 10, in <module>
    from matplotlib.backends.backend_gtk import gtk, FigureManagerGTK, FigureCanvasGTK,\
  File "/usr/lib64/python2.7/site-packages/matplotlib/backends/backend_gtk.py", line 13, in <module>
    import gtk; gdk = gtk.gdk
  File "/usr/lib64/python2.7/site-packages/gtk-2.0/gtk/__init__.py", line 64, in <module>
    _init()
  File "/usr/lib64/python2.7/site-packages/gtk-2.0/gtk/__init__.py", line 52, in _init
    _gtk.init_check()
RuntimeError: could not open display
Run Code Online (Sandbox Code Playgroud)

在这条线上 from pylab import *

如何在我的Linux服务器上运行的python脚本中绘制和保存图形?

谢谢

Max*_*Noe 18

你几乎不应该使用from pylab import *.

导入你需要的东西numpy,scipymatplotlib.

在没有显示的机器上,您需要使用agg后端:

您可以通过指定环境变量来实现此目的 MPLBACKEND

$ MPLBACKEND=Agg python plot.py
Run Code Online (Sandbox Code Playgroud)

或者在导入matplotlib 之前导入matplotlib.pyplot:

import matplotlib
matplotlib.use('Agg')

import matplotlib.pyplot as plt

plt.plot([1, 2, 1])
plt.savefig('test.pdf')
Run Code Online (Sandbox Code Playgroud)

要使其成为默认值,您可以创建matplotlibrc 在当前目录中调用的文件,或者$HOME/.config/matplotlib使用以下内容:

backend: Agg
Run Code Online (Sandbox Code Playgroud)

您可以启用X-Forwarding,因此主机上会弹出图表:

ssh -X user@server
Run Code Online (Sandbox Code Playgroud)