名單

2011-02-23 53 views
46

當前後端的名字是通過名單

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

訪問是否有一種方式來獲得,可以在特定機器上使用的所有後端的清單?

在此先感謝。

回答

31

您可以訪問列表

matplotlib.rcsetup.interactive_bk 
matplotlib.rcsetup.non_interactive_bk 
matplotlib.rcsetup.all_backends 

第三個是前兩者的連接。如果我正確地閱讀了源代碼,那些列表是硬編碼的,並且不會告訴你後端實際上可用。也有

matplotlib.rcsetup.validate_backend(name) 

但這也只是針對硬編碼列表進行檢查。

2

你可以看一下可能的後端列表下面的文件夾...

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

有斯文提到的硬編碼的列表,而是要找到每一個後端,其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 
36

這裏是以前發佈的腳本的修改。它查找所有支持的後端,驗證它們並測量它們的fps。在OSX崩潰蟒蛇當談到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 :(") 
+1

Upvoted作爲一個更完整的答案(我可能會因爲這正是我所需要的)。 – fredbaba 2013-02-07 09:21:59

+0

我的腳本崩潰了(https://gist.github.com/palmstrom/6039823),但在Spyder IDE下運行時效果很好。 – Palmstrom 2013-07-19 15:12:43

+0

這個基準的典型結果是什麼? FPS號碼任何人? – rc0r 2017-05-03 11:25:40

3

您還可以看到一些文檔一些後端的位置:

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 
+2

孤獨的鏈接被認爲是一個不好的答案(參見[faq#刪除]),因爲它本身毫無意義,並且**目標資源不能保證在將來活着**。 [這將是最好的](http://meta.stackexchange.com/q/8259)在這裏包括答案的基本部分,並提供鏈接供參考。 – j0k 2013-02-18 12:57:43

+0

對不起,我認爲上面的答案涵蓋了這個問題,但應該有鏈接作爲參考,這就是爲什麼我張貼。我的意思是沒有傷害,我是一個noob。 – Leandro 2013-03-12 19:18:39