Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

tkinter.TclError: couldn't connect to display "localhost:18.0"

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/']) 

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" 

Is there anyone who can solve this problem, to move matplotlib.pyplot figure files from server to local computer as well?

like image 557
user2901339 Avatar asked Oct 22 '13 12:10

user2901339


1 Answers

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.

Change your imports to

import matplotlib matplotlib.use('pdf') import matplotlib.pyplot as plt 
like image 130
tacaswell Avatar answered Sep 23 '22 13:09

tacaswell