# 簡介
> 原文:[Introduction](http://matplotlib.org/users/intro.html)
> 譯者:[飛龍](https://github.com/)
> 協議:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
Matplotlib 是一個用于在 [Python](https://www.python.org/) 中繪制數組的 2D 圖形庫。雖然它起源于模仿 MATLAB?[1] 圖形命令,但它獨立于 MATLAB,可以以 Pythonic 和面向對象的方式使用。雖然 Matplotlib 主要是在純 Python 中編寫的,但它大量使用 [NumPy](http://www.numpy.org/) 和其他擴展代碼,即使對于大型數組也能提供良好的性能。
Matplotlib 的設計理念是,你應該能夠使用幾個,或者只有一個命令創建簡單的圖形。如果你想看到你的數據的直方圖,你不需要實例化對象,調用方法,設置屬性等等;它應該能夠工作。
多年來,我常常使用 MATLAB 進行數據分析和可視化。 MATLAB 擅長繪制漂亮的圖形。當我開始處理 EEG 數據時,我發現我需要編寫應用程序來與我的數據交互,并在 MATLAB 中開發了一個 EEG 分析應用程序。隨著應用程序越來越復雜,需要與數據庫,http 服務器交互,并操作復雜的數據結構,我開始與 MATLAB 作為一種編程語言的限制而抗爭,并決定遷移到 Python。 Python 作為一種編程語言,彌補了 MATLAB 的所有缺陷,但我很難找到一個 2D 繪圖包(3D [VTK](http://www.vtk.org/) 則超過了我的所有需求)。
當我去尋找一個 Python 繪圖包時,我有幾個要求:
+ 繪圖應該看起來不錯 - 發布質量。 對我來說一個重要的要求是文本看起來不錯(抗鋸齒等)
+ 用于包含 TeX 文檔的 Postscript 輸出
+ 可嵌入圖形用戶界面用于應用程序開發
+ 代碼應該足夠容易,我可以理解它,并擴展它
+ 繪圖應該很容易
沒有找到適合我的包,我做了任何自稱 Python 程序員會做的事情:擼起我的袖子開始自己造。我沒有任何真正的計算機圖形經驗,決定模仿 MATLAB 的繪圖功能,因為 MATLAB 做得很好。這有額外的優勢,許多人有很多 MATLAB 的經驗,因此,他們可以很快開始在 python 中繪圖。從開發人員的角度來看,擁有固定的用戶接口(pylab 接口)非常有用,因為代碼庫的內容可以重新設計,而不會影響用戶代碼。
Matplotlib 代碼在概念上分為三個部分:pylab 接口是由`matplotlib.pylab`提供的函數集,允許用戶使用非常類似于 MATLAB 圖生成代碼([Pyplot 教程](http://matplotlib.org/users/pyplot_tutorial.html#pyplot-tutorial))的代碼創建繪圖。 Matplotlib 前端或 Matplotlib API 是一組重要的類,創建和管理圖形,文本,線條,圖表等([藝術家教程](http://matplotlib.org/users/artists.html#artist-tutorial))。這是一個對輸出無所了解的抽象接口。后端是設備相關的繪圖設備,也稱為渲染器,將前端表示轉換為打印件或顯示設備(什么是后端?)。后端示例:PS 創建 [PostScript?](http://www.adobe.com/products/postscript/) 打印件,SVG 創建[可縮放矢量圖形](http://www.w3.org/Graphics/SVG/)打印件,Agg 使用 Matplotlib 附帶的高質量[反顆粒幾何庫](http://antigrain.com/)創建 PNG 輸出,GTK 在 [Gtk+](https://www.gtk.org/) 應用程序中嵌入 Matplotlib,GTKAgg 使用反顆粒渲染器創建圖形并將其嵌入到 Gtk+ 應用程序中,以及用于 [PDF](https://acrobat.adobe.com/us/en/why-adobe/about-adobe-pdf.html),[WxWidgets](https://www.wxpython.org/),[Tkinter](https://docs.python.org/library/tkinter.html) 等。
Matplotlib 被很多人在許多不同的上下文中使用。有些人希望自動生成 PostScript 文件以發送給打印機或發布商。其他人在 Web 應用程序服務器上部署 Matplotlib 來生成 PNG 輸出,并包含在動態生成的網頁中。一些人在 Windows? 上的 Tkinter 的 Python shell 中以交互方式使用 Matplotlib。我的主要用途是將 Matplotlib 嵌入 Windows,Linux 和 Macintosh OS X 上運行的 Gtk+ EEG 應用程序中。
> [1] MATLAB 是 MathWorks 公司的注冊商標。