_tkinter.TclError: no display name and no $DISPLAY environment variable

I am running a simple python script in the server:

    import matplotlib.pyplot as plt
    import numpy as np

    x = np.random.randn(60)
    y = np.random.randn(60)

    plt.scatter(x, y, s=20)

    out_png = 'path/to/store/out_file.png'
    plt.savefig(out_png, dpi=150)

I try to use the command python example.py in this server which has matplotlib 1.5.1 installed it fails with the error:

    Traceback (most recent call last):
      File "example.py", line 7, in <module>
        plt.scatter(x, y, s=20)
      File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/pyplot.py", line 3241, in scatter
        ax = gca()
      File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/pyplot.py", line 928, in gca
        return gcf().gca(**kwargs)
      File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/pyplot.py", line 578, in gcf
        return figure()
      File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/pyplot.py", line 527, in figure
      File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/backends/backend_tkagg.py", line 84, in new_figure_manager
        return new_figure_manager_given_figure(num, figure)
      File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/backends/backend_tkagg.py", line 92, in new_figure_manager_given_figure
        window = Tk.Tk()
      File "/usr/local/lib/python2.7/lib-tk/Tkinter.py", line 1810, in __init__
        self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
    _tkinter.TclError: no display name and no $DISPLAY environment variable

What is happening here?

Matplotlib chooses Xwindows backend by default. You need to set matplotlib to not use the Xwindows backend.

Add this code to the start of your script ( before importing pyplot ) and try again:

    import matplotlib

Or add to .config/matplotlib/matplotlibrc line backend : Agg.

Or when connect to server use ssh -X ... command to use Xwindows.

Also you may try to export display: export DISPLAY=mymachine.com:0.0

And look through this page: Generating a PNG with matplotlib when DISPLAY is undefined

From: stackoverflow.com/q/37604289

Back to homepage or read more recommendations: