繁体   English   中英

使用matplotlib绘制图形,使用X11和OS X在ssh上绘制图形

[英]Plotting figures using matplotlib, over ssh using X11 and OS X

摘要:当本地计算机运行OS X时,如何通过SSH将图形绘制到远程计算机?

我有计算机A,并且尝试使用matplotlib在计算机B上进行绘图。我遇到的问题是,当我使用matplotlib时,该图仅显示在计算机A上。我在VNC中查看并弹出它们。 我可以将-X / -Y SSH到计算机A并运行xcalc,它将显示在计算机B上。我可以将计算机B连接到运行Red Hat的第三台计算机,并且绘图将显示在计算机B上。我确信它不是是计算机B的问题。 我相信我的问题与此问题相同:软件包安装程序都不支持matplotlib的X11后端。 我无法发表评论,所以我坚持将我尝试过的内容放在一个新问题中。 这是对多次尝试都不起作用的相同问题的另一种描述。

如前所述,我已经在计算机A上为matplotlib安装后端方面尝试了许多解决方案。 我已经尝试了Macports的所有庄园以及自制和点子组合。 我敢肯定,混合这么多包处理程序是一个坏主意,但是这么多解决方案似乎都是“ sudo ***** install package-name”。

要测试matplotlib是否正在执行我想要的操作,我使用以下python代码段:

import matplotlib
matplotlib.use('gtk') # gtk is an example, I change it
import matplotlib.pyplot as plt
plt.ion()
plt.figure(1)
plt.plot([1]*10)

我不记得我尝试过的所有事情。 我尝试过的一些方法:

我尝试使用GTK和GTKCairo,但无法解决我的问题,因为我无法使GTK正常工作。 Homebrew GTK仍然不支持X11,因此即使它正确安装,我也认为它不会解决我的问题。 我尚未尝试以其他方式安装GTK。 我需要从源代码安装它吗? 有人有这个工作吗?

GTK错误:

ImportError: No module named _backend_gdk

后端MacOS,TkAgg,qt5agg都可以工作,但是数字显示在计算机A上。我必须安装pyqt5。 如果我未通过VNC连接,则python会引发有关无显示的错误。 这三个都给出相同的错误:

Feb 22 13:00:22  Python[57649] <Error>: Set a breakpoint at CGSLogError to catch errors as they are logged.
Feb 22 13:00:22  Python[57649] <Error>: This user is not allowed access to the window system right now.
_RegisterApplication(), FAILED TO establish the default connection to the WindowServer, _CGSDefaultConnection() is NULL.

这不能解决我的问题。 也不是。

细节:

计算机A运行OS X 10.11计算机B运行OS X 10.12

编辑:我从源(以及QT)安装了PyQt4,它没有帮助。 我明确下载并安装了X11版本。 我设置了matplotlib.use('qt4agg'),并且数字仍然出现在计算机A上。也许这是我安装的“ macosx” QT吗? 我不知道

最终导致我找到正确的答案。 问题是我无法安装使用X11的后端。 事实证明macports具有使用x11的tk版本。 我认为这实际上是使用macports安装python时的默认设置。

我从OS X服务器(计算机A)通过ssh / X11获取matplotlib绘图的步骤是:

1)卸载先前安装的matplotlib和tk的macports:

sudo port uninstall py27-matplotlib
sudo port uninstall py27-tkinter
sudo port uninstall tk

2)重新安装matplotlib以使用X11

sudo port install tk
sudo port install py27-tkinter
sudo port install py27-matplotlib -cairo +tkinter

“ -cairo”可能不是必需的。 tk没有标志,因为默认为x11。

3)测试python + matplotlib:

import matplotlib
matplotlib.use('tkagg') # set the backend to tk, using agg renderer
import matplotlib.pyplot as plt
plt.ion()
plt.figure(1)
plt.plot([1]*10)

这将在计算机B上打开一个图。

一些注意事项:

1)确保$ PYTHONPATH环境变量中没有任何指向其他安装程序(例如自制软件或系统python)执行的python安装的内容。 这可能会导致加载错误的matplotlib安装。

2) 您可以使用matplotlibrc配置文件来避免每次打开matplotlib时都必须重新指定后端。

3)如我的原始帖子所述, Homebrew不再为GTK支持X11。 显然,有一种方法可以让自制软件在X11上使用tk ,但是我还没有弄清楚如何使它工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM