在很多網上文檔和郵件列表中提到了"后端",並且很多初學者會對這個術語迷惑。matplotlib把不同使用情形和輸出格式作為目標。一些人用matplotlib在python shell上交互,當他們輸入命令能夠彈出繪圖窗口。一些人把matplotlib嵌入到其他的用戶圖形接口如:wxpython或者pygtk中來編寫豐富的應用程序。有些人用matplotlib使用到批處理腳本中,從數字模擬中生成Postscript圖片,還有些人用在web應用服務器中來動態生成圖。
為了支持所有的使用情形,matplotlib能夠產生不同的輸出,而把每一個不同輸出的能力叫做一個后端。而前端就是用戶需要處理的代碼,如繪圖代碼,然后后端做的就是所有看不到的辛苦工作來生成視圖窗口。這里有兩種不同類型的后端:
2.硬拷貝后端,也叫做非交互式后端,用來生成圖像文件(PNG,SVG,PDF, PS)
主要有兩種方式配置你的后端。
backend : WXAgg # 使用wxpython和antigrain(agg)渲染
2. 另外一種方式是使用matplotlib的use()命令。
import matplotlib matplotlib.use('PS') # 默認生成postscript輸出。
如果你使用use命令,必須在import matplotlib.pyplot或者matplotlib.pylab之前設置。
注意: 后端的名字是不區分大小寫的,如: “GTKAgg”和“gtkagg”是一樣的。
使用常規方式安裝matplotlib如二進制安裝包或者linux發行包,那么一個好的默認后端已經設置好了,即允許你交互式工作也可以從腳本文件中繪制,可以輸出到屏幕也可以輸出到文件。所以你也不必去使用上面給出的方法去初始化了。
然而,如果你想要寫用戶圖形接口或者web應用服務器(在web應用服務器中使用Matplotlib),或者需要更好理解它是怎么進行的,請閱讀下去。對於圖形化用戶接口,為了使事情更加可定制化,matplotlib區分了渲染器(繪圖)和繪圖面板(顯示繪圖的地方)的概念。對於用戶接口,典型的渲染器是Agg,它是使用Anti-Grain Geometry C++庫來產生光柵(像素)圖。所有的用戶接口除了macosx外,都可以和agg一樣來渲染,如WXAgg,GTKAgg,QT4Agg,TKAgg。另外,一些用戶接口支持其他的渲染引擎。例如:使用GTK,你可以選擇GDK渲染(后端為GTK), 也可以使用Cairo渲染(后端為GTKCairo)
對於渲染引擎,可以用向量或者光柵渲染器來區別。向量圖語言畫圖命令有點像"從這個點到那個點畫條線",所以是可以任意比例縮放。光柵后端通過每英寸每點的像素來產生線條。
這里對matplotlib渲染器做個總結(沒有等級先后次序,都是非交互式的后端,擁有寫入到文件中的能力)
渲染器 | 文件類型 | 描述 |
---|---|---|
AGG | png | 光柵圖 –使用 Anti-Grain Geometry 高質量渲染引擎 |
PS | ps eps | 矢量圖 – Postscript 輸出 |
矢量圖– 可攜帶格式 | ||
SVG | svg | 矢量圖 – 可伸縮矢量圖形 |
Cairo | png ps pdf svg ... | 矢量圖 – Cairo圖 |
GDK | png jpg tiff ... | 光柵圖 – gimp |
還有一些支持用戶接口和渲染器緊密結合的后端,他們是交互式的后端,擁有在屏幕上展示的能力,使用上表中適當的渲染器來寫入到文件中。
后端 | 描述 |
---|---|
GTKAgg | Agg渲染器輸出到GTK繪圖面板(需要PyGTK) |
GTK | GDK渲染器輸出到GTK繪圖面板(不推薦,需要PyGTK) |
GTKCairo | Cairo渲染器輸出到GTK繪圖面板(需要PyGTK) |
WXAgg | Agg渲染器輸出到wxWidgets繪圖面板(需要wxPython) |
WX | 原生wxWidgets繪圖輸出到wxWidgets繪圖面板(不推薦,需要wxPython) |
TkAgg | Agg渲染器輸出到Tk繪圖面板(需要Tkinter) |
QtAgg | Agg渲染器輸出到Qt繪圖面板(不推薦,請使用Qt4Agg,需要PyQt) |
Qt4Agg | Agg渲染器輸出到Qt4繪圖面板(需要PyQt4) |
FLTKAgg | Agg渲染器輸出到FLTK繪圖面板(需要pyFLTK, 使用不是很廣,考慮使用TKAgg,GTKAgg,WXAgg,或者QT4Agg替代) |
macosx | Cocoa渲染器在osx上。(目前在非交互式模式缺少阻塞show()行為) |