Python 2.7.12 Matplotlib x11 转发不显示或抛出多个错误

Posted

技术标签:

【中文标题】Python 2.7.12 Matplotlib x11 转发不显示或抛出多个错误【英文标题】:Python 2.7.12 Matplotlib x11 forwarding not showing or throwing multiple errors 【发布时间】:2016-07-27 22:02:02 【问题描述】:

我正在通过 putty 从 Windows 7 登录到远程 linux 机器。在设置中我启用了 X11 转发选项,并在登录 ssh 服务器时添加了 -X 标志。在这台服务器上,我运行以下 python 代码:

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import numpy as np
import pyfits
a = raw_input("path: ") #filepath on the server, conected with filename
file = pyfits.open (a +'/file.fits', memap = 'True')
data = file[0].data
print data.shape #shape gets printed correctly

plt.figure(1)
plt.imshow(data[0,:,:], cmap = 'gray')
print 3
plt.show()
print 4

我得到了所有的打印值,输出如下所示:

(300, 512, 512)
3
4

没有引发错误,也没有打开 x11 窗口。 comadoline 像节目结束一样返回。是否有可能让plt.show() 命令实际显示在远程控制Windows 机器上?

【问题讨论】:

要测试您的 x11 转发是否真的有效,您可以使用plt.savefig("out.png") 保存您的图,然后如果您在远程机器上有“gnome 之眼”,请使用eog out.png 打开它以查看跨度> 您已要求 mpl 使用不包含 GUI 的 'Agg' 后端。如果您想使用交互式窗口,您需要使用 GUI 连接的后端之一(例如 'Qt4Agg''tkagg')。 【参考方案1】:

我明白了:

一开始就像“tcaswell”所说,你不能在交互式窗口中使用'Agg' 后端。只需删除前两行代码即可修复此错误。 第二个问题是,plt.figure(1) 命令创建了一个新的数字 1,但在 plt.show() 命令中没有指定应该显示的数字。所以这个错误可以通过删除plt.figure(1) 的行或将要绘制的图形编号放在plt.show() 命令后面的括号中来解决:plt.show(1)。通过这种方式,可以在一个文件中创建多个图形并能够在它们之间切换。

【讨论】:

以上是关于Python 2.7.12 Matplotlib x11 转发不显示或抛出多个错误的主要内容,如果未能解决你的问题,请参考以下文章

centos 6.4 升级python到版本2.7.12

重新安装 python 2.7.12 和 python 3.5.2

supperset (python 2.7.12 + mysql)记录

怎样把linux的python2.7.6升级到python2.7.12

CentOS 安装Python 2.7

Python-2.7.12list类型