Список всех доступных адресов библиотек matplotlib


текущее имя бэкэнда доступно через

>>> import matplotlib.pyplot as plt
>>> plt.get_backend()
'GTKAgg'

есть ли способ получить список всех бэкэндов, которые можно использовать на конкретной машине?

5 58

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

вы можете посмотреть на следующую папку для списка возможных бэкэндов...

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