List of all available matplotlib backends

后端 未结 7 1996
情话喂你
情话喂你 2020-11-27 13:06

The current backend name is accessible via

>>> import matplotlib.pyplot as plt
>>> plt.get_backend()
\'GTKAgg\'

Is there a way to get a list of all ba

相关标签:
7条回答
  • 2020-11-27 13:08

    You can access the lists

    matplotlib.rcsetup.interactive_bk
    matplotlib.rcsetup.non_interactive_bk
    matplotlib.rcsetup.all_backends
    

    the third being the concatenation of the former two. If I read the source code correctly, those lists are hard-coded though, and don't tell you what backends are actually usable. There is also

    matplotlib.rcsetup.validate_backend(name)
    

    but this also only checks against the hard-coded list.

    0 讨论(0)
  • 2020-11-27 13:08

    Here is a modification of the script posted previously. It finds all supported backends, validates them and measures their fps. On OSX it crashes python when it comes to tkAgg, so use at your own risk ;)

    from __future__ import print_function, division, absolute_import
    from pylab import *
    import time
    
    import matplotlib.backends
    import matplotlib.pyplot as p
    import os.path
    
    
    def is_backend_module(fname):
        """Identifies if a filename is a matplotlib backend module"""
        return fname.startswith('backend_') and fname.endswith('.py')
    
    def backend_fname_formatter(fname): 
        """Removes the extension of the given filename, then takes away the leading 'backend_'."""
        return os.path.splitext(fname)[0][8:]
    
    # get the directory where the backends live
    backends_dir = os.path.dirname(matplotlib.backends.__file__)
    
    # filter all files in that directory to identify all files which provide a backend
    backend_fnames = filter(is_backend_module, os.listdir(backends_dir))
    
    backends = [backend_fname_formatter(fname) for fname in backend_fnames]
    
    print("supported backends: \t" + str(backends))
    
    # validate backends
    backends_valid = []
    for b in backends:
        try:
            p.switch_backend(b)
            backends_valid += [b]
        except:
            continue
    
    print("valid backends: \t" + str(backends_valid))
    
    
    # try backends performance
    for b in backends_valid:
    
        ion()
        try:
            p.switch_backend(b)
    
    
            clf()
            tstart = time.time()               # for profiling
            x = arange(0,2*pi,0.01)            # x-array
            line, = plot(x,sin(x))
            for i in arange(1,200):
                line.set_ydata(sin(x+i/10.0))  # update the data
                draw()                         # redraw the canvas
    
            print(b + ' FPS: \t' , 200/(time.time()-tstart))
            ioff()
    
        except:
            print(b + " error :(")
    
    0 讨论(0)
  • 2020-11-27 13:22

    You can also see some documentation for a few backends here:

    http://matplotlib.org/api/index_backend_api.html

    the pages lists just a few backends, some of them don't have a proper documentation:

    matplotlib.backend_bases
    matplotlib.backends.backend_gtkagg
    matplotlib.backends.backend_qt4agg
    matplotlib.backends.backend_wxagg
    matplotlib.backends.backend_pdf
    matplotlib.dviread
    matplotlib.type1font
    
    0 讨论(0)
  • 2020-11-27 13:22

    You could look at the following folder for a list of possible backends...

    /Library/Python/2.6/site-packages/matplotlib/backends
    /usr/lib64/Python2.6/site-packages/matplotlib/backends
    
    0 讨论(0)
  • 2020-11-27 13:24

    What about this?

    %matplotlib --list
    Available matplotlib backends: ['tk', 'gtk', 'gtk3', 'wx', 'qt4', 'qt5', 'qt', 'osx', 'nbagg', 'notebook', 'agg', 'svg', 'pdf', 'ps', 'inline', 'ipympl', 'widget']
    
    0 讨论(0)
  • 2020-11-27 13:26

    You can pretend to put a wrong backend argument, then it will return you a ValueError with the list of valid matplotlib backends, like this:

    Input:

    import matplotlib
    matplotlib.use('WRONG_ARG')
    

    Output:

    ValueError: Unrecognized backend string 'test': valid strings are ['GTK3Agg', 'GTK3Cairo', 'MacOSX', 'nbAgg', 'Qt4Agg', 'Qt4Cairo', 'Qt5Agg', 'Qt
    5Cairo', 'TkAgg', 'TkCairo', 'WebAgg', 'WX', 'WXAgg', 'WXCairo', 'agg', 'cairo', 'pdf', 'pgf', 'ps', 'svg', 'template']
    
    0 讨论(0)
提交回复
热议问题