matplotlib | Python強大的作圖工具,讓你從此駕馭圖表(二)


今天是數據處理專題的第10篇文章,我們繼續來聊聊matplot這個工具庫。

在上周的文章當中我們介紹了matplot的基本用法,以及展示了一些簡單的例子,讓大家直觀地了解這個工具包。我們可以簡單地將它理解成專門用來作圖的工具,但是它作圖的功能又非常強大,以至於並不能當成一個簡單的內容來對待。道理也很簡單,老板讓你去做一份數據出來,結果你畫出來的圖啥也沒有,也不知道什么顏色代表什么內容,也沒有標題,難以閱讀,顯然這是不行的。

所以我們還需要深入學習它的一些高級用法, 讓我們做出來的圖更加的直觀,展示更多的信息,也更加美觀。

Figure設置圖像大小

首先我們來介紹一個很重要的概念,叫做Figure。Figure是matplotlib的核心對象,可以理解成所有我們畫出來的圖像的數據都存在figure對象當中。其實這個概念非常直觀,因為在英文當中figure本身就有圖像的意思,當然它還可以指一個人的身材,扯遠了……

在計算機領域當中類似的概念有不少,如果我們不知道它的英文意思,可能會覺得這些概念都很費解,這邊一個概念,那邊一個概念,有時候如果能夠了解一下它對應的英文原意,也許會發現些驚喜,讓你理解更加順暢。

figure最簡單的用法就是設置matplotlib繪制出來圖片的大小,我們用sigmoid函數圖像舉例,我們正常畫出來的圖像是這樣的:

由於圖片會有縮放,所以大家可能很難直接從文章的圖片上看出它的大小,但是至少我們是可以看出來這是一個長方形的圖像。如果我們想要將它繪制成正方形呢?或者是我們想要控制它的大小,讓它畫得長一些或者是寬一些或者是單純地大一些呢?

這時候我們就需要用到figure了,我們可以在figure當中通過figsize這個參數來設置它的大小。比如我們用下面這些代碼繪制出來的圖像就變了:

即使看不出來大小,但是我們也可以看得出來圖片變成了正方形。原因是因為我們傳入的size是一個(5, 5)的tuple,這里的5的單位是英寸。也就是說我們通過參數設置,可以使得繪制出來的圖像按照我們想要的大小展示,並且可以保證不論在什么設備上看到的結果都是一樣的。

subplot與子圖

有的時候我們希望把一系列圖表合並在一起,拼成一張大圖,這樣的話會更加方便我們觀看,可以一次性獲取更多的信息。對於這個問題有好幾個解決方案,我們一個一個來看。

plt.subplot

首先,我們可以使用plt.subplot方法,subplot顧名思義就是子圖的意思。這時候我們傳入三個數,前面兩個參數表示我們最后想要得到的大圖的情況。比如說我們希望最后的大圖是由兩行一列的小圖組成的,那么我們就傳入2,1。第三個參數表示當前繪制的是第幾個小圖。

這里隱藏的重點是我們繪制多個子圖的時候是一個一個繪制的,小圖的擺放形式非常類似於二維數組。我們來看一個例子:

plt.subplot(211)
plt.plot(range(10))
plt.subplot(212)
plt.plot(x, y)
plt.show()

可以看到我們一共調用了兩次plot方法,每一次調用之前都先調用了subplot申明了當前plot的是第幾個子圖。這樣我們得到的結果就是由兩行一列不同圖像組成的大圖。

關於subplot有一點需要注意,如果我們在調用subplot之前也調用了plot,那么我們plot的內容會被清除。比如說我們在subplot之前再多調用一次plot,得到的結果是一樣的。

plt.plot(10)
plt.subplot(211)
plt.plot(range(10))
plt.subplot(212)
plt.plot(x, y)

因為我們調用subplot的時候清除了當前figure當中已經有的內容,所以還是只能看到上面的結果。

figure.add_subplot

上面一種方法的好處是用起來非常方便,我們只需要不停地調用subplot就可以了,但是壞處是會清除之前殘留的圖像,還有就是不是非常直觀。雖然所有操作都通過plt進行非常方便,但是對於初學者而言要記住這么多api並不是一件容易的事情。

所以這里我們還有另外一種方法,這一種方法要直觀很多,也更加符合我們日常編程的習慣。這個方法就是通過figure調用add_subplot。也就是我們先創建figure對象之后,再往figure當中添加子圖。我們同樣來看個例子:

fig = plt.figure()
ax1 = fig.add_subplot(211)
ax2 = fig.add_subplot(212)

ax1.plot(range(10))
ax2.plot(x, y)
plt.show()

在這段代碼當中我們先創建了一個figure對象,然后再通過這個figure對象創建了兩個subplot對象。最后我們對於每一個subplot對象單獨繪制,這樣整個過程更加得順滑,和我們理解的面向對象的思想更加接近。還有一點就是它會保留創建子圖之前的改動。

如果我們在這段代碼之前加上plt.plot(range(10))的話,那我們看到的結果會是這樣的:

subplots

最后一種方法是subplots,它是第二種方法的進化。我們在使用第二種方法的時候有沒有一種覺得很麻煩的感覺?因為我們要先創建figure,再通過figure創建subplot。我們最后操作的對象是subplot,既然如此,為什么我們不能直接創建出subplot對象來呢?

所以plt當中提供了subplots方法可以直接創建出figure和subplot對象,我們只需要傳入我們希望得到的子圖的長和寬即可。由於子圖會有多個,所以返回的結果會自動存入一個二維數組當中,我們只需要用數組的形式去訪問它即可。

我們來看一個例子:

關於figure和subplot的基本用法就介紹完了,當然除了今天介紹的內容之外,還有很多其他的用法,這些就留到之后的文章介紹吧。

今天的文章到這里就結束了,如果喜歡本文的話,請來一波素質三連,給我一點支持吧(關注、轉發、點贊)。

原文鏈接,求個關注

- END -


免責聲明!

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



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