Hier ist eine Modifikation des zuvor veröffentlichten Skripts. Es findet alle unterstützten Backends, validiert sie und misst ihre fps. Unter OSX stürzt Python ab, wenn es um tkAgg geht. Verwenden Sie es also auf eigenes Risiko;)
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:]
backends_dir = os.path.dirname(matplotlib.backends.__file__)
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))
backends_valid = []
for b in backends:
try:
p.switch_backend(b)
backends_valid += [b]
except:
continue
print("valid backends: \t" + str(backends_valid))
for b in backends_valid:
ion()
try:
p.switch_backend(b)
clf()
tstart = time.time()
x = arange(0,2*pi,0.01)
line, = plot(x,sin(x))
for i in arange(1,200):
line.set_ydata(sin(x+i/10.0))
draw()
print(b + ' FPS: \t' , 200/(time.time()-tstart))
ioff()
except:
print(b + " error :(")
python2
Um das Skript unter auszuführen , machen Sie die erste Zeile nach shebang thefrom __future__ import print_function, division, absolute_import
. (Ich wollte den Code in der Frage bearbeiten ... aber erpython2
ist zu diesem Zeitpunkt so verdammt alt ... Ich denke, es ist schlecht, diese Art von Cruft hinzuzufügen ... Ich denke, es würde nur schlechtes Verhalten fördern .)Es gibt die von Sven erwähnte fest codierte Liste, aber um jedes Backend zu finden, das Matplotlib verwenden kann (basierend auf der aktuellen Implementierung zum Einrichten eines Backends), kann der Ordner matplotlib / backends überprüft werden.
Der folgende Code macht das:
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
quelle
Sie können so tun, als würden Sie ein falsches Backend-Argument einfügen. Dann erhalten Sie einen ValueError mit der Liste der gültigen Matplotlib-Backends wie folgt:
Eingang:
import matplotlib matplotlib.use('WRONG_ARG')
Ausgabe:
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']
quelle
Hier finden Sie auch einige Dokumentationen zu einigen Backends:
http://matplotlib.org/api/index_backend_api.html
Auf den Seiten sind nur einige Backends aufgeführt, von denen einige nicht ordnungsgemäß dokumentiert sind:
quelle
Im folgenden Ordner finden Sie eine Liste möglicher Backends ...
/Library/Python/2.6/site-packages/matplotlib/backends /usr/lib64/Python2.6/site-packages/matplotlib/backends
quelle
Was ist damit?
%matplotlib --list Available matplotlib backends: ['tk', 'gtk', 'gtk3', 'wx', 'qt4', 'qt5', 'qt', 'osx', 'nbagg', 'notebook', 'agg', 'svg', 'pdf', 'ps', 'inline', 'ipympl', 'widget']
quelle