77 votes

Liste de tous les backends matplotlib disponibles

Le nom actuel du backend est accessible via

>>> importer matplotlib.pyplot en tant que plt
>>> plt.get_backend ()
'GTKAgg'

Existe-t-il un moyen d’obtenir une liste de tous les moteurs pouvant être utilisés sur une machine particulière?

Merci d'avance.

62voto

Sven Marnach Points 133943

Vous pouvez accéder aux listes

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

le troisième étant la concaténation des deux premiers. Si je lis correctement le code source, ces listes sont codées en dur et ne vous disent pas quels sont les moteurs réellement utilisables. Il y a aussi

 matplotlib.rcsetup.validate_backend(name)
 

mais cela ne vérifie également que la liste codée en dur.

49voto

stfn Points 302

Voici une modification du script posté précédemment. Il trouve tous les moteurs pris en charge, les valide et mesure leurs images par seconde. Sur OSX, il bloque python quand il s’agit de tkAgg, alors utilisez-le à vos risques et périls;)

 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 :("
 

6voto

pelson Points 5011

Il y a la liste codée en dur mentionnée par Sven, mais pour trouver chaque backend pouvant être utilisé par Matplotlib (en fonction de l'implémentation actuelle pour la configuration d'un backend), le dossier matplotlib / backends peut être inspecté.

Le code suivant fait ceci:

 import matplotlib.backends
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 backends
 

4voto

Leandro Points 121

Vous pouvez aussi voir de la documentation pour quelques serveurs ici:

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

les pages ne listent que quelques backends, certains n’ont pas de documentation adéquate:

 matplotlib.backend_bases
matplotlib.backends.backend_gtkagg
matplotlib.backends.backend_qt4agg
matplotlib.backends.backend_wxagg
matplotlib.backends.backend_pdf
matplotlib.dviread
matplotlib.type1font
 

2voto

sharth Points 25625

Vous pouvez consulter le dossier suivant pour une liste des moteurs possibles ...

 /Library/Python/2.6/site-packages/matplotlib/backends
/usr/lib64/Python2.6/site-packages/matplotlib/backends
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X