运行时错误:无效的DISPLAY变量

56

我正在使用Linux的ssh命令在另一台机器上运行我的Python脚本。我还执行了以下命令:

source ~/.bashrc 

在登录其他计算机后,为了在新计算机中定义正确的路径,我运行以下Python代码时遇到错误消息,即使我已经尝试按此问题中的说明定义了后端。请注意保留HTML标签。
>>> import matplotlib
>>> import pylab as plt
>>> matplotlib.use('Agg')
>>> import numpy as np
>>> x=np.arange(0,2,0.001)
>>> y=np.sin(x)**2+4*np.cos(x)
>>> fig = plt.figure()
>>> plt.plot(x,y,'r.')     

错误信息

This probably means that Tcl wasn't installed properly.
Traceback (most recent call last):
  File "Systematic_Optimised.py", line 513, in <module>
    fig = plt.figure()
  File "/vol/anaconda/lib/python2.7/site-packages/matplotlib/pyplot.py", line 435, in figure
    **kwargs)
  File "/vol/anaconda/lib/python2.7/site-packages/matplotlib/backends/backend_qt4agg.py", line 47, in new_figure_manager
    return new_figure_manager_given_figure(num, thisFig)
  File "/vol/anaconda/lib/python2.7/site-packages/matplotlib/backends/backend_qt4agg.py", line 54, in new_figure_manager_given_figure
    canvas = FigureCanvasQTAgg(figure)
  File "/vol/anaconda/lib/python2.7/site-packages/matplotlib/backends/backend_qt4agg.py", line 72, in __init__
    FigureCanvasQT.__init__(self, figure)
  File "/vol/aibn84/data2/zahra/anaconda/lib/python2.7/site-packages/matplotlib/backends/backend_qt4.py", line 68, in __init__
    _create_qApp()
  File "/vol/anaconda/lib/python2.7/site-packages/matplotlib/backends/backend_qt5.py", line 138, in _create_qApp
    raise RuntimeError('Invalid DISPLAY variable')
RuntimeError: Invalid DISPLAY variable

有没有建议如何解决这个问题?

1
在您的计算机上执行 echo $DISPLAY 命令。您的操作系统是什么?您是否通过 ssh 运行? - 9000
1
如果您需要使用远程机器上的显示器,则需要使用带有“-X”参数的ssh。 - Klaus D.
2
@KlausD。我已经使用了ssh -X username@host命令进行登录。 - Dalek
2个回答

72

在导入 pylab as plt 之前,您必须先声明 matplotlib.use('agg')

参考资料


1
看一下这个[评论](https://github.com/matplotlib/matplotlib/issues/3466/#issuecomment-195899517) - Mauro Baraldi
1
看起来你应该使用小写字母'a',所以在导入pylab as plt之前使用matplotlib.use('agg')。 - Michelle Owen
1
@MauroBaraldi 是的,我做了。至少对我来说有效。 - Michelle Owen
1
在虚拟环境中,我也成功地运行了,在安装了pip install PySide之后。非常感谢! - fr_andres
13
对我来说,import matplotlib; matplotlib.use('agg')并没有解决错误,但是import matplotlib; matplotlib.pyplot.switch_backend('agg')可以(如这里所建议的)。 - teichert
显示剩余2条评论

56
添加
plt.switch_backend('agg')

之后

import matplotlib.pyplot as plt

谢谢!这样与pylint的兼容性更好了 :) - Hugh Perkins
3
太棒了,现在我可以根据运行代码的方式切换后端。使用'agg'时会有问题,它会停止在命令窗口中显示图形,有时会令人失望。因此,我可以为我的用途切换后端。 - pacificgilly1992

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接