我正在尝试使用命令pylab.savefig
在远程计算机上生成一个数字。
但我得到了这样的错误:
Unable to access the X Display, is $DISPLAY set properly?
如何正确保存图形?
答案 0 :(得分:137)
默认情况下,matplotlib将使用类似TkAgg
后端的内容。这需要运行X服务器。
虽然您可以使用X-forwarding,但matplotlib尝试连接远程X-server时会出现明显的延迟。如果您不需要与绘图进行交互,那么通过完全避免X连接来加快速度通常会更好。
如果您想完成一个不需要X-server的情节,请改用Agg
backend。
E.g。做这样的事情:
import matplotlib
matplotlib.use('Agg') # Must be before importing matplotlib.pyplot or pylab!
import matplotlib.pyplot as plt
fig = plt.figure()
plt.plot(range(10))
fig.savefig('temp.png')
如果您希望这是默认行为,则可以默认修改matplotlibrc file以使用Agg
后端。
答案 1 :(得分:1)
嗯,正确设置DISPLAY变量?
使用X11的网络图形由具有DISPLAY环境变量的客户端(远程)计算机工作,该变量指示绘制图形的位置。通常它会像mydesktop.example.com:0.0那样 - 然后当一个X11程序试图绘制某些内容时,它会通过网络连接到mydesktop.example.com,这是你坐在前面的机器(X服务器)然后弹出。
现在,如果你面前的机器是Windows,那么你需要从某个地方获得一台X服务器 - cygwin / X11或商用eXceed会很好。
您还需要确保安全性得到处理 - 您不能让任何人通过网络写入您的屏幕。
您是如何连接远程计算机的?因为如果你从一个Linux盒子到另一个带有ssh的Linux盒子,那么简单的解决方案可能是“使用ssh -X foo.example.com”进行连接 - 这会通过本地套接字管道X11连接。
那么,如果ssh -X不是答案,我们可以获得有关所涉及的操作系统的更多信息吗?