tkinter.TclError:无法连接以显示“localhost:18.0"
问题描述
我试图在中央服务器中运行模拟(用 python 编写),模拟完成后,通过连接到我的本地 PC 将保存的图形文件/保存的数据文件移动到我的本地 PC.代码如下:
I was trying to run a simulation (written in python) in the central server, and when simulation is finished, move saved figure file / saved data file to my local PC, by connecting to my local PC. Code is as following:
import matplotlib.pyplot as plt
import subprocess
import scipy.io
import os
#Save data file:
scipy.io.savemat(data_path + Filename_str, dict(A=board))
#Create / Save figure by using imshow (Heatmap)
p = plt.imshow(mean_map.T, cmap = plt.cm.gist_yarg_r, origin = 'lower', extent = [0, phi, 0, Z], aspect='auto')
plt.savefig(figure_path + Filename_str + '-Homophily.pdf')
# Connect to my local host (arabian-knights) using ssh, and follow command.
ret = subprocess.call(['ssh', 'arabian-knights', 'mv Data/* /scratch/Data/'])
ret = subprocess.call(['ssh', 'arabian-knights', 'mv Figure/* /scratch/Figure/'])
从我的本地计算机(阿拉伯骑士)连接到服务器计算机后,我在服务器计算机的后台运行此模拟.即使我关闭了与服务器计算机的连接,因为模拟在后台运行,它不会停止,并且在模拟完成后数据文件会正确移动到我的本地计算机.但是,图形文件(由 matplotlib.pyplot.imshow 生成)没有保存,显示以下错误消息:
I run this simulation in background of server computer, after connecting to server computer from my local computer (arabian-knights). Even though I turn off connection to server computer, as simulation is running in background, it doesn't stop, and Data files are correctly moved to my local computer after simulation is done. However, Figure files (produced by matplotlib.pyplot.imshow) are not saved, showing following error messsage:
Traceback (most recent call last):
File "./ThrHomoHeatmap-thrstep.py", line 179, in <module>
p = plt.imshow(board.T, cmap = plt.cm.gist_yarg_r, vmin=0, vmax=n, origin = 'lower', extent = [0, phi, 0, Z], aspect='auto')
File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 2370, in imshow
ax = gca()
File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 701, in gca
ax = gcf().gca(**kwargs)
File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 369, in gcf
return figure()
File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 343, in figure
**kwargs)
File "/usr/lib/pymodules/python2.7/matplotlib/backends/backend_tkagg.py", line 80, in new_figure_manager
window = Tk.Tk()
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1688, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: couldn't connect to display "localhost:18.0"
有没有人可以解决这个问题,将matplotlib.pyplot图形文件也从服务器移动到本地计算机?
Is there anyone who can solve this problem, to move matplotlib.pyplot figure files from server to local computer as well?
解决方案
问题是您正在使用一个交互式后端,它试图为您创建图形窗口,但由于您断开了之前的 x-server开始模拟时可用.
The problem is that you are using an interactive backend which is trying to create figure windows for you, which are failing because you have disconnected the x-server that was available when you started the simulations.
将您的导入更改为
import matplotlib
matplotlib.use('pdf')
import matplotlib.pyplot as plt
相关文章