所有可用的matplotlib后端列表
当前的后端名称可以通过
>>> import matplotlib.pyplot as plt >>> plt.get_backend() 'GTKAgg'
有没有办法获得可以在特定机器上使用的所有后端列表?
提前致谢。
您可以访问列表
matplotlib.rcsetup.interactive_bk matplotlib.rcsetup.non_interactive_bk matplotlib.rcsetup.all_backends
第三个是前两个的连接。 如果我正确地阅读了源代码,那么这些列表是硬编码的,而不会告诉你后端实际上是否可用。 也有
matplotlib.rcsetup.validate_backend(name)
但是这也只是针对硬编码列表进行检查。
这是以前发布的脚本的修改。 它find所有支持的后端,validation它们并测量它们的fps。 在OSX上,当涉及到tkAgg时,它会崩溃python,所以使用风险自负;)
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 :(")
有Sven提到的硬编码列表,但要查找Matplotlib可以使用的每个后端(基于当前实现设置后端),可以检查matplotlib /后端文件夹。
下面的代码是这样的:
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
您也可以在这里看到一些后端的文档:
http://matplotlib.org/api/index_backend_api.html
页面只列出几个后端,其中一些没有正确的文档:
matplotlib.backend_bases matplotlib.backends.backend_gtkagg matplotlib.backends.backend_qt4agg matplotlib.backends.backend_wxagg matplotlib.backends.backend_pdf matplotlib.dviread matplotlib.type1font
你可以看看下面的文件夹中的可能的后端列表…
/Library/Python/2.6/site-packages/matplotlib/backends /usr/lib64/Python2.6/site-packages/matplotlib/backends