python - example - Lista de todos los backends de matplotlib disponibles
matplotlib title (5)
Aquí hay una modificación del guión publicado anteriormente. Encuentra todos los back-end compatibles, los valida y mide sus fps. En OSX, bloquea Python cuando se trata de tkAgg, por lo que debes utilizarlo bajo tu propia responsabilidad;)
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 :(")
El nombre actual de backend es accesible a través de
>>> import matplotlib.pyplot as plt >>> plt.get_backend() ''GTKAgg''
¿Hay alguna manera de obtener una lista de todos los backends que se pueden usar en una máquina en particular?
Está la lista de código fijo mencionada por Sven, pero para encontrar todos los back-end que Matplotlib puede usar (en base a la implementación actual para configurar un backend) la carpeta matplotlib / backends puede ser inspeccionada.
El siguiente código hace esto:
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
Puede consultar la siguiente carpeta para obtener una lista de posibles backends ...
/Library/Python/2.6/site-packages/matplotlib/backends
/usr/lib64/Python2.6/site-packages/matplotlib/backends
Puedes acceder a las listas
matplotlib.rcsetup.interactive_bk
matplotlib.rcsetup.non_interactive_bk
matplotlib.rcsetup.all_backends
el tercero es la concatenación de los dos anteriores. Si leo correctamente el código fuente, esas listas están codificadas, y no te dicen qué backends son realmente utilizables. También hay
matplotlib.rcsetup.validate_backend(name)
pero esto también solo se compara con la lista codificada.
También puede ver algunos documentos para algunos backends aquí:
http://matplotlib.org/api/index_backend_api.html
las páginas enumeran solo algunos backends, algunos de ellos no tienen una documentación adecuada:
matplotlib.backend_bases
matplotlib.backends.backend_gtkagg
matplotlib.backends.backend_qt4agg
matplotlib.backends.backend_wxagg
matplotlib.backends.backend_pdf
matplotlib.dviread
matplotlib.type1font