Matplotlib:远程机器上的显示图

时间:2010-08-10 20:34:59

标签: python ssh matplotlib

我有一个python代码在远程机器上进行一些计算,名为A.我通过ssh从名为B的机器连接A. 有没有办法在机器B上显示数字?

10 个答案:

答案 0 :(得分:24)

当然,您可以启用X11转发。通常,这是通过在连接到远程计算机时将-X-Y选项传递给ssh来完成的。

ssh -X computerA

请注意,还必须配置计算机A上的SSH守护程序以启用X11转发。这是通过放

来完成的
X11Forwarding yes

在计算机A的sshd_config配置文件中。

如果计算机A的SSH守护程序没有启用X11转发,您可以随时让Python将计算结果写入文本文件,将其下载到计算机B,并在本地使用Matplotlib。

答案 1 :(得分:23)

如果在远程计算机(B)上的Mac OS X上使用matplotlib,则必须首先确保使用基于X11的显示器后端之一,因为本机Mac OS X后端无法导出绘制到另一个显示器。

可以选择后端
import matplotlib
matplotlib.use('GTK')  # Or any other X11 back-end

可以通过给use()一个不正确的后端名称来获取支持的后端列表:matplotlib然后打印一条错误消息,列出可能的后端。

然后可以使用ssh X11转发来显示matplotlib图。

答案 2 :(得分:12)

以下内容适用于本地计算机(机器B)上的Mac OS X和遥控器(机器A)上的ubuntu。

您需要在本地计算机上安装X11服务器才能执行此操作。

如果您正在运行最新版本的Mac OSX(OS X Mountain Lion或更新版本),则不会预先安装X11(请参阅http://support.apple.com/kb/ht5293)。通过打开Mac终端检查是否有X11,然后运行命令xterm。 如果打开X11窗口,则全部设置完毕。如果显示找不到命令,则转到http://xquartz.macosforge.org/landing/并安装X11服务器。然后注销并重新登录到您的Mac。

重新登录后,尝试再次运行xterm命令。它应该打开X11窗口。 此时,还应正确设置$ DISPLAY变量。如果未设置,请确保自从XQuartz安装X11后您已登录/退出。

echo $DISPLAY
/tmp/launch-I9I3aI/org.macosforge.xquartz:0

然后从本地计算机上,使用ssh -X远程进入远程计算机A:

ssh -X user@machineA

然后在远程机器上:

python
>>> import matplotlib
>>> matplotlib.use('GTKAgg')  #I had to use GTKAgg for this to work, GTK threw errors
>>> import matplotlib.pyplot as plt  #...  and now do whatever you need...

请务必在matplotlib.use导入其他任何内容之前致电matplotlib(例如matplotlib.pyplot

有关使用ssh -X的其他有用的故障排除提示:http://oroborosx.sourceforge.net/remotex.html#usessh

答案 3 :(得分:7)

GTK似乎无法使用Python3在Ubuntu上工作。相反,我使用了tkagg(来自this回答):

import matplotlib
matplotlib.use('tkagg')
import matplotlib.pyplot as plt

用这个测试:

import matplotlib
matplotlib.use('tkagg')
import matplotlib.pyplot as plt
plt.plot([1, 2, 3])
plt.show()

答案 4 :(得分:1)

如果这不起作用,您也可以尝试:

import matplotlib.pyplot as plt
plt.switch_backend('agg')

import matplotlib.pyplot as plt
plt.switch_backend('TkAgg')

这似乎对我有用

但是,如果您要使GUI正常工作,建议您查看以下链接:http://fabiorehm.com/blog/2014/09/11/running-gui-apps-with-docker/

答案 5 :(得分:0)

我已经使用IPython解决了相关问题。步骤如下:

步骤1:使用以下命令在本地计算机(假定没有root特权)中在远程计算机(A)中安装IPython和Jupyter:

pip install --user ipython
pip install --user jupyter 

更新matplotlib:

pip install --user -U matplotlib

第2步:

在没有浏览器的情况下从远程计算机(A)的代码目录中运行Jupyter:

cd PATH/TO/THE/CODE
jupyter notebook --no-browser --port=8080

执行此命令后,将给URL类似于以下内容:

http://localhost:8080/?token=5528ab1eeb3f621b90b63420f8bbfc510edf71f21437c4e2

第3步:

现在在本地计算机(B)中打开另一个终端,并使用ssh连接到远程计算机(A):

ssh -N -L 8080:localhost:8080 user_id@remote.host

步骤2 步骤3 中的端口号必须相同。在此示例中,端口号为8080。

第4步:

第3步中的URL复制并粘贴到本地计算机中的浏览器(B)。

现在,可以通过浏览器使用远程计算机中的笔记本,并可以使用远程计算机中的数据生成绘图。

答案 6 :(得分:0)

export MPLBACKEND="agg"对我有用。 显然,您也可以通过代码进行设置。

答案 7 :(得分:0)

只需添加-如果您在Windows上作为本地计算机,请确保已设置Xming(X Windows服务器)和Putty,以便可以查看远程Linux图形应用程序。

我按照此处的说明进行操作:http://laptops.eng.uci.edu/software-installation/using-linux/how-to-configure-xming-putty。它还设置了您的显示环境和变量,因此在使用tkagg作为后端时不会出现错误。

答案 8 :(得分:0)

如果您使用 Mac 作为客户端机器,请试试这个。

您基本上需要确保两件事正常工作。

  • 使用 GTK 或 Cairo 作为 matplotlib 的后端。
  • 转发显示内容。

使用 GTK 或 Cairo 作为 matplotlib 的后端

如果您使用 python3,则必须安装 cairocffi

pip install cairocffi

然后使用 GTK3Agg 作为 matplotlib 的后端。

import matplotlib 
matplotlib.use('GTK3Agg') 
import matplotlib.pyplot as plt

有关详细信息,请参阅以下来自 matplotlib document 的说明。

<块引用>

无论是 GTK2 还是 GTK3,都对 PyCairo 有隐式依赖 使用的特定 Matplotlib 后端。不幸的是最新版本 PyCairo for Python3 没有实现所需的 Python 包装器 用于 GTK3Agg 后端。 Cairocffi 可以用作替代品 实现正确的包装器。

转发显示

  1. 安装启动最新版本的 XQuartz。
  2. 使用 ssh -X 连接到远程服务器。例如) ssh username@ipaddress -X

答案 9 :(得分:0)

这就是我在 MacOS 和 Linux 远程机器上所做的。

  1. 在 ~/.ssh/config 中,我添加了以下内容。我添加这个是因为您的机器可能没有正确获取 xauth 位置。
    XAuthLocation /opt/X11/bin/xauth
  1. ssh -Y 机器名称
  2. 运行以下虚拟程序:
    import matplotlib.pyplot as plt
    x = [1,2,3]
    y = [2,4,1]
    plt.plot(x, y)
    plt.show()