Список всех доступных адресов библиотек matplotlib
текущее имя бэкэнда доступно через
>>> import matplotlib.pyplot as plt >>> plt.get_backend() 'GTKAgg'
есть ли способ получить список всех бэкэндов, которые можно использовать на конкретной машине?
5 ответов:
Вы можете получить доступ к спискам
matplotlib.rcsetup.interactive_bk matplotlib.rcsetup.non_interactive_bk matplotlib.rcsetup.all_backends
в-третьих, объединение первых двух. Если я правильно прочитал исходный код, эти списки жестко закодированы, хотя и не говорят вам, какие бэкэнды на самом деле можно использовать. Есть также
matplotlib.rcsetup.validate_backend(name)
но это только проверяет по списку жестко.
вот модификация скрипта, опубликованная ранее. Он находит все поддерживаемые бэкэнды, проверяет их и измеряет их fps. На OSX он падает python, когда дело доходит до tkAgg, поэтому используйте на свой страх и риск;)
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 / backends папка может быть проверена.
следующий код делает это:
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