matplotlib中什么是后端


在很多網上文檔和郵件列表中提到了"后端",並且很多初學者會對這個術語迷惑。matplotlib把不同使用情形和輸出格式作為目標。一些人用matplotlib在python shell上交互,當他們輸入命令能夠彈出繪圖窗口。一些人把matplotlib嵌入到其他的用戶圖形接口如:wxpython或者pygtk中來編寫豐富的應用程序。有些人用matplotlib使用到批處理腳本中,從數字模擬中生成Postscript圖片,還有些人用在web應用服務器中來動態生成圖。

為了支持所有的使用情形,matplotlib能夠產生不同的輸出,而把每一個不同輸出的能力叫做一個后端。而前端就是用戶需要處理的代碼,如繪圖代碼,然后后端做的就是所有看不到的辛苦工作來生成視圖窗口。這里有兩種不同類型的后端:

1.用戶接口后端(又叫做"交互式后端",如pygtk, wxpython, thinter,qt, macosx或者fltk)。

2.硬拷貝后端,也叫做非交互式后端,用來生成圖像文件(PNG,SVG,PDF, PS)

主要有兩種方式配置你的后端。

1. 在matplotlibrc文件中設置后端參數,請查看 自定義matplotlib
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 輸出
  PDF pdf 矢量圖– 攜帶格式
  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()行為)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM