當前後端的名字是通過名單
>>> import matplotlib.pyplot as plt >>> plt.get_backend() 'GTKAgg'
訪問是否有一種方式來獲得,可以在特定機器上使用的所有後端的清單?
在此先感謝。
當前後端的名字是通過名單
>>> 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)
但這也只是針對硬編碼列表進行檢查。
你可以看一下可能的後端列表下面的文件夾...
/Library/Python/2.6/site-packages/matplotlib/backends
/usr/lib64/Python2.6/site-packages/matplotlib/backends
有斯文提到的硬編碼的列表,而是要找到每一個後端,其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
這裏是以前發佈的腳本的修改。它查找所有支持的後端,驗證它們並測量它們的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 :(")
您還可以看到一些文檔一些後端的位置:
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
Upvoted作爲一個更完整的答案(我可能會因爲這正是我所需要的)。 – fredbaba 2013-02-07 09:21:59
我的腳本崩潰了(https://gist.github.com/palmstrom/6039823),但在Spyder IDE下運行時效果很好。 – Palmstrom 2013-07-19 15:12:43
這個基準的典型結果是什麼? FPS號碼任何人? – rc0r 2017-05-03 11:25:40