76

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

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

如何正确保存图形?

4

2 回答 2

151

默认情况下,matplotlib 将使用类似TkAgg后端的东西。这需要运行 X 服务器。

虽然您可以只使用 X-forwarding,但当 matplotlib 尝试与远程 X-server 连接时会有明显的延迟。如果您不需要与情节进行交互,那么通过完全避免 X 连接来加快速度通常会更好。

如果您想在根本不需要 X 服务器的情况下进行绘图,请改用Agg 后端

例如做这样的事情:

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 文件以默认使用Agg后端。

有关详细信息,请参阅本文

于 2011-01-16T16:38:33.813 回答
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 不是答案,我们能否提供有关所涉及操作系统的更多信息?

于 2011-01-16T16:27:22.543 回答