如何使用pylab远程保存数字?

时间:2011-01-16 16:11:59

标签: python matplotlib figure

我正在尝试使用命令pylab.savefig在远程计算机上生成一个数字。 但我得到了这样的错误:

Unable to access the X Display, is $DISPLAY set properly?

如何正确保存图形?

2 个答案:

答案 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后端。

请参阅this article for more information

答案 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不是答案,我们可以获得有关所涉及的操作系统的更多信息吗?