【问题标题】:RuntimeError: Invalid DISPLAY variableRuntimeError:无效的显示变量
【发布时间】:2016-06-14 17:01:39
【问题描述】:

我正在使用linux 中的ssh 命令在另一台机器上运行我的python 脚本。我也运行了这个命令:

source ~/.bashrc 

登录另一台机器后,为了在新机器上定义正确的路径。即使我尝试通过定义后端来遵循this question 中的指令,我也收到了运行以下 python 代码行的错误消息。

>>> 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

任何解决问题的建议

【问题讨论】:

  • 在你的机器上做echo $DISPLAY。你的操作系统是什么,你是通过 ssh 运行的吗?
  • 如果你必须使用远程机器上的显示,你需要使用带有-X参数的ssh。
  • @KlausD。我已经使用ssh -X username@host 命令登录了。

标签: python linux matplotlib


【解决方案1】:

您必须在import pylab as plt 之前声明matplotlib.use('agg')

Reference

【讨论】:

  • 看看这个comment
  • 看来你应该使用小写'a',所以在import pylab as plt之前使用matplotlib.use('agg')。
  • @MauroBaraldi 是的,我做到了。至少它对我有用。
  • 在不得不pip install PySide 之后在虚拟环境中也为我工作。非常感谢!
  • 对我来说,import matplotlib; matplotlib.use('agg') 没有修复错误,但 import matplotlib; matplotlib.pyplot.switch_backend('agg') 修复了错误(正如建议的 here)。
【解决方案2】:

添加

plt.switch_backend('agg')

之后

import matplotlib.pyplot as plt

【讨论】:

  • 谢谢!这与 pylint 配合得更好 :)
  • 这太棒了,现在我可以根据我运行代码的方式切换后端。我在使用 'agg' 时遇到问题,它停止在命令窗口中显示绘图,这有时会令人失望。因此,我可以切换后端以供我使用。
猜你喜欢
  • 1970-01-01
  • 2013-05-31
  • 2012-06-04
  • 2017-03-19
  • 1970-01-01
  • 1970-01-01
  • 2014-04-25
  • 1970-01-01
相关资源
最近更新 更多