我正在尝试使用命令pylab.savefig
在远程计算机上生成一张图像。但是出现了如下错误:
Unable to access the X Display, is $DISPLAY set properly?
我该如何正确地保存这个图形?
我正在尝试使用命令pylab.savefig
在远程计算机上生成一张图像。但是出现了如下错误:
Unable to access the X Display, is $DISPLAY set properly?
我该如何正确地保存这个图形?
TkAgg
的后端。这需要运行X服务器。
虽然您可以使用X转发,但由于matplotlib尝试连接远程X服务器,因此会有明显的延迟。如果您不需要与绘图交互,则通常最好通过完全避免X连接来加速事情。
如果要制作一个不需要X服务器的图,请改用Agg
backend。
例如,执行以下操作: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')
Agg
后端设置为默认值。matplotlib.use
只能在任何方式导入 matplotlib.pyplot
之前使用。你是否已经导入了 pyplot?这包括像 pylab
或其他导入 pyplot 的库。它还包括活动的 ipython 会话,或者如果你设置了任何自动导入。尝试从命令行中使用裸露的 python
运行一个最小的示例。 - Joe Kingtonpython
>>>import matplotlib
>>>matplotlib.matplotlib_fname()
'/path/to/matplotlib/matplotlibrc'backend : Tkagg
替换为 -> backend : Agg
- Wael尝试将DISPLAY变量设置为适当的值。
使用X11通过网络进行图形处理的方式是,客户端(远程)计算机具有一个DISPLAY环境变量,指示在哪里绘制图形。通常它会是类似于mydesktop.example.com:0.0这样的东西 - 然后当X11程序尝试绘制某些内容时,它会通过网络传输到mydesktop.example.com,这是您坐在面前的机器(X服务器),然后弹出窗口。
现在,如果您面前的机器是Windows,则需要从某个地方获取X服务器 - cygwin/X11或商业eXceed都可以胜任。
您还需要确保安全性得到处理 - 您不能让任何人通过网络写入您的屏幕。
您是如何连接到远程机器的?因为如果您从Linux桌面连接到另一台Linux桌面,则简单的解决方案可能是“使用ssh -X foo.example.com”进行连接 - 这会将X11连接通过本地套接字传输。
因此,如果ssh -X不是答案,我们可以了解一下涉及的操作系统的更多信息吗?