如何使用pylab远程保存图形? [复制]
Posted
技术标签:
【中文标题】如何使用pylab远程保存图形? [复制]【英文标题】:How to save a figure remotely with pylab? [duplicate] 【发布时间】:2011-06-10 00:55:08 【问题描述】:我正在尝试使用命令pylab.savefig
在远程计算机上生成图形。
但是我遇到了这样的错误:
Unable to access the X Display, is $DISPLAY set properly?
如何正确保存图?
【问题讨论】:
相关:***.com/questions/2801882/… 【参考方案1】:默认情况下,matplotlib 将使用类似 TkAgg
的后端。这需要运行 X 服务器。
虽然您可以只使用 X-forwarding,但当 matplotlib 尝试与远程 X-server 连接时会有明显的延迟。如果您不需要与情节互动,通常最好通过完全避免 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')
如果您希望这是默认行为,您可以修改您的 matplotlibrc file 以默认使用 Agg
后端。
见this article for more information。
【讨论】:
我对格里也有同样的问题。对我来说,仅靠 Joe 的把戏是不够的,我还需要做 ssh -X nos@server.com 而不仅仅是 ssh matplotlib.use('Agg') 对我不起作用,但在 matplotlibrc 文件中将后端默认更改为 Agg(位于 /usr/local/lib/python2.7/dist-packages/ matplotlib/mpl-data/matplotlibrc )为我工作 我仍然有运行时错误:(文件“/home/user/anaconda2/lib/python2.7/site-packages/matplotlib/backends/backend_qt5.py”,第 138 行,在 _create_qApp raise RuntimeError('无效的 DISPLAY 变量') RuntimeError: 无效的 DISPLAY 变量 @Hana90:matplotlib.use
仅在以任何方式导入 matplotlib.pyplot 之前有效。您是否可能已经导入了 pyplot?这包括 pylab
或其他导入 pyplot 的库。它还包括一个活动的 ipython 会话,或者如果您设置了任何自动导入。尝试从命令行使用裸 python
运行一个最小示例。
谢谢我要连接ssh -X服务器,谢谢【参考方案2】:
尝试将 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 不是答案,我们能否提供有关所涉及操作系统的更多信息?
【讨论】:
感谢您的解释。我是 Windows 下的 ssh linux 机器。没有X11可以制作这个数字吗? 不是让它出现在屏幕上——你必须让 pylab 将它写入一个文件,然后将该文件复制到你的 Windows 机器上。不妨试一试winswitch.org - 这是一个简单的界面,可以享受跨平台的图形乐趣。 我从我的 linux 机器到另一个 linux 机器执行了“ssh -X username@servername”,它工作了 你好 Spacedman,我有一个问题。我需要像你这样的专家建议,请看***.com/questions/36248016/…以上是关于如何使用pylab远程保存图形? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何将在 for 循环中生成的多个图形而不是 SUBPLOTS 保存为一个图形? [复制]
在 ipython 中调用 pylab.savefig 而不显示
如何使用 GIT cmd 将远程分支代码的副本复制到本地分支 [重复]