Matplotlib設計的基本邏輯

這篇文章的主要內容來自

Artist tutorial - Matplotlib 2.1.1 documentationmatplotlib.org圖標

artist Module - Matplotlib 2.1.1 documentationmatplotlib.org圖標

,並且加入了我個人的體會。大家可以直接閱讀相應文檔。

使用一個工具,首先要理解其本後設計的邏輯,然後我們才知道如何下手,順著工具的理念去用。不然就會顯得非常奇怪。

Matplotlib涉及的邏輯基本上跟我們自己繪畫的流程是一樣的。

  • 找一張紙或者一塊畫布;
  • 調色等一系列前戲;
  • 作畫。

由於模擬了類似的過程,所以Matplotlib一共有三個基本的模塊。

  • FigureCanvas
  • Renderer
  • Artist

這三個模塊,分別實現了與我們真實作畫一一對應的功能,當然必定是有些差別的。前兩個模塊把一些如何跟計算機底層交互的事情處理了,而我們絕大部分的工作,都是在利用Artist的介面。

Artist介面中包含了兩類元素或者說是對象。一類是類似曲線Line2D,文字text,圖像image這樣一些最基本的元素。還有一類被稱作容器的對象,比方坐標系Axes,坐標軸Axis等等。而這些我們在前面的文章中都有所涉及。

下面這張圖,涵蓋了Artist中所包含的元素,來自上面第二個鏈接。

簡單地說,Artist中,我們經常使用或在無意識下經常使用的就是Axes這個對象。之前我們已經解釋過,它可以生成一個坐標系。該坐標系是一種容器,我們可以畫各種我們想畫的圖形,做各種標記,修改各種屬性。可以說,在pyplot這個介面中,絕大部分的函數都來自於axes,或是axes某種屬性的重新定義,比方plot,legend等函數。

另外一個我們經常打交道的元素叫做Axis,就是坐標軸。它也是一個容器類,包含了坐標軸上的各種元素。比方刻度線,刻度值,坐標軸的名稱等等。

所以只要我們弄清了Axes和Axis,基本上如何作圖,如何修改就搞清楚了。

Python是一種高級編程語言,在Python中,一切皆為對象。因此Matplotlib繼承了這一特點。畫圖的過程,提倡使用面向對象的寫法。但是為了簡單和可交互性,Matplotlib也提供了過程式或者命令式編程。這主要在Pylab中。

pylab和pyplot是Matplotlib中兩個不同的部分。

pyplot是Matplotlib下的一個模塊,它提供了畫圖所需的基本介面,提倡用面向對象的方式編程。比方說,一般我們畫圖的時候應該是這麼一個流程

第一步,產生一幅圖

fig=figure()

第二步,建立坐標系

ax=fig.add_axes()

第三步,畫圖

ax.plot()

第四步,顯示

show()

pylab是和Matplotlib並行存在的一個包。它實際上導入了numpy和Matplotlib中相應的功能,大包提供一個可交互的畫圖環境。pylab主要在終端或者以過程式編程的方式使用,這也是我們大部分時候使用的方式。畢竟,我們需要一幅一幅圖畫,修改。其實每一次調用一個函數,就是要設定某個屬性,類似於一個指令,因此不需要用面向對象的方式來考慮。

如果理解了Matplotlib它設計的基本原理,和主要對象的具體含義,那麼如果需要某些設定和修改的話,就很容易在相應的模塊中找到文檔學習。


推薦閱讀:

第一篇:關於開發環境
C++中關於跨平台中子線程式控制制的一些心得(2):用於線程的同步的Async容器
面向新手的雜談:Flyweight

TAG:Matplotlib | 編程 | 數據可視化 |