Generating a PNG with matplotlib when DISPLAY is undefined

前端 未结 12 1257
感动是毒
感动是毒 2020-11-22 02:51

I am trying to use networkx with Python. When I run this program it get this error. Is there anything missing?

#!/usr/bin/env python

import networkx as nx
i         


        
相关标签:
12条回答
  • 2020-11-22 02:58

    I found this snippet to work well when switching between X and no-X environments.

    import os
    import matplotlib as mpl
    if os.environ.get('DISPLAY','') == '':
        print('no display found. Using non-interactive Agg backend')
        mpl.use('Agg')
    import matplotlib.pyplot as plt
    
    0 讨论(0)
  • 2020-11-22 02:59

    I will just repeat what @Ivo Bosticky said which can be overlooked. Put these lines at the VERY start of the py file.

    import matplotlib
    matplotlib.use('Agg') 
    

    Or one would get error

    */usr/lib/pymodules/python2.7/matplotlib/__init__.py:923: UserWarning:  This call to   matplotlib.use() has no effect
    because the the backend has already been chosen;
    matplotlib.use() must be called *before* pylab, matplotlib.pyplot,*
    

    This will resolve all Display issue

    0 讨论(0)
  • 2020-11-22 02:59

    When signing into the server to execute the code use this instead:

    ssh -X username@servername
    

    the -X will get rid of the no display name and no $DISPLAY environment variable error

    :)

    0 讨论(0)
  • 2020-11-22 02:59
    import matplotlib
    matplotlib.use('Agg')
    import matplotlib.pyplot as plt
    

    It works for me.

    0 讨论(0)
  • 2020-11-22 03:00

    The clean answer is to take a little bit of time correctly prepare your execution environment.

    The first technique you have to prepare your execution environment is to use a matplotlibrc file, as wisely recommended by Chris Q., setting

    backend : Agg
    

    in that file. You can even control — with no code changes — how and where matplotlib looks for and finds the matplotlibrc file.

    The second technique you have to prepare your execution environment is to use the MPLBACKEND environment variable (and inform your users to make use of it):

    export MPLBACKEND="agg"
    python <program_using_matplotlib.py>
    

    This is handy because you don't even have to provide another file on disk to make this work. I have employed this approach with, for example, testing in continuous integration, and running on remote machines that do not have displays.

    Hard-coding your matplotlib backend to "Agg" in your Python code is like bashing a square peg into a round hole with a big hammer, when, instead, you could have just told matplotlib it needs to be a square hole.

    0 讨论(0)
  • 2020-11-22 03:01

    Just as a complement of Reinout's answer.

    The permanent way to solve this kind of problem is to edit .matplotlibrc file. Find it via

    >>> import matplotlib
    >>> matplotlib.matplotlib_fname() # This is the file location in Ubuntu '/etc/matplotlibrc'

    Then modify the backend in that file to backend : Agg. That is it.

    0 讨论(0)
提交回复
热议问题