matplotlib繪圖教程,設置標籤與圖例

大家好,歡迎大家閱讀週四數據處理專題

,我們繼續介紹matplotlib作圖工具。

在上一篇文章當中我們介紹了matplotlib這個包當中顏色、標記和線條這三種畫圖的設置,今天我們同樣也介紹三種新的設置。分別是標題、軸標籤以及圖例,這三個內容也是非常實用並且常用的。顏色、線條、標記這些設置的是圖像本身的一些屬性,而標題、軸標籤這些數據是額外提供的補充數據,所以這兩者的內在邏輯是不同的。

設置標題

和公眾號一樣,圖像的標題也很重要,它直接告訴我們這幅圖表達的內容。舉個例子來說你畫了logistics的函數圖像,但是給了一個外行人(比如老闆)看,他是無論怎樣也看不出來這究竟是什麼意思的。所以我們需要標題,告訴看這幅圖的人,這幅圖到底畫了一些什麼數據。

基礎設置

設置標題的方法很簡單,如果我們就只有一幅圖畫的話,直接通過plt.title來設置即可。

matplotlib繪圖教程,設置標籤與圖例

在子圖中設置

通過plt設置title非常方便,也是我們最常用的設置方法。但是對於多個子圖的場景,我們就不能通過plt來設置title了,而是希望對於每一個子圖都能夠設置一個單獨的title。

我們看一個之前的例子,我們之前用下面這段代碼同時畫出了兩個圖像:

<code>fig = plt.figure()
ax1 = fig.add_subplot(2, 1, 1)
ax2 = fig.add_subplot(2, 1, 2)

ax1.plot(range(10))
ax2.plot(x, y)
plt.show()
/<code>

這裡的每一個ax都是一個subplot的對象,也就代表著每一個子圖。所以我們要為子圖設置title的話,那麼顯然應該通過subplot對象,也就是操作這裡的ax變量來進行。這裡我們用到的api不再是title,而是set_title。我也不知道為什麼要起不一樣的名字,可能是為了區分吧。

我們把set_title的邏輯加上之後,得到的圖像是這樣的:

matplotlib繪圖教程,設置標籤與圖例

這裡有一個小小的問題是兩個圖捱得太近了,導致logistic的標題和上一幅圖的座標軸重疊了。這個也很簡單,我們可以通過subplots_adjust設置讓子圖之間分開一些。

matplotlib繪圖教程,設置標籤與圖例

通過這個設置我們可以控制這些子圖距離左右邊界以及彼此之間的間隙,我們可以設置成plt.subplots_adjust(hspace=0.5),表示子圖之間的間距是0.5英寸。這樣我們得到的結果如下:

matplotlib繪圖教程,設置標籤與圖例

title參數

傳入一個字符串作為標題,這個只是最基本的設置,其實標題還有很多參數可以diy。但一般不太常用,因為標題有和沒有的區別比較大,是斜體還是正常體的區別很小,所以這些內容的邊際收益很小。但我們還是要介紹一下的,至少需要有一個印象,以後如果要用的時候才能想的起來。

title一共有9種參數,分別是fontsize字體大小,fontweight字體粗細,fontsytle字體風格,verticalalignment豎直對齊方式,horizontalalignment水平對齊方式,rotation旋轉角度,alpha透明度,backgroundcolor背景顏色和bbox外框。

我們一個一個來簡單說下它們接收的參數:

  1. fontsize字體大小,我們可以輸入一個數字來代表字體的大小,默認是12。也可以輸入一個字符串,選擇字符串的話只有['xx-small', 'x-small', 'small', 'medium', 'large','x-large', 'xx-large']這麼幾種。看起來它的邏輯和我們買衣服的尺碼是一樣的。
  2. fontweight字體粗細,一般常用的選項有:['light', 'normal', 'medium', 'semibold', 'bold', 'heavy', 'black']。這些我們顧名思義就可以猜得出來每個選項代表什麼意思。比如bold就是加粗,semibold是半加粗,heavy是重加粗,black就是全黑了。
  3. verticalalignment豎直對齊方式的參數是這麼幾種:'center' , 'top' , 'bottom' ,'baseline' ,這個參數用得不多。
  4. horizontalalignment水平對齊方式的參數是[left,right,center],和我們日常在word裡設置是一樣的。這個比上面那個用得頻率高一些。
  5. rotation旋轉角度,我們可以傳入一個數字代表旋轉的角度,也可以傳入vertical,horizontal 來表示我們想要旋轉的效果。
  6. alpha透明度,參數在0到1之間。
  7. backgroundcolor背景顏色,也沒什麼好說的。
  8. bbox背景框,背景框雖然只是一個參數,但是它是由好幾個參數組合形成的。比如facecolor背景顏色,edgecolor線條顏色,boxstyle方框外形,edgewidth線條粗細。

我們把這些參數都用起來給大家看一個組合例子:

matplotlib繪圖教程,設置標籤與圖例

軸標籤

軸標籤顧名思義,就是在座標軸上加上標籤,告訴大家這個座標軸代表的含義。比如我們畫的月份銷量圖,我們的橫座標是每年的月份,縱座標是當月的銷量。如果不標出來看圖的人很難知道這個軸代表的含義,可能會理解錯。所以我們可以給座標軸加上軸標籤,讓大家一眼就看得出來,這個軸代表的含義。

加上軸標籤的方法也非常簡單,和剛才添加title的方式基本一樣,用xlabel設置x軸標籤,用ylabel設置y軸標籤。比如這樣:

matplotlib繪圖教程,設置標籤與圖例

如果是多個子圖,我們同樣操作subplot這個對象來進行設置。

matplotlib繪圖教程,設置標籤與圖例

設置圖例

下面來介紹一下設置圖例,圖例這個翻譯不是很好,但是也找不到更精準的翻譯了。圖例的使用場景是我們將多個曲線畫在同一張畫布上的時候,這時候為了區分每一個顏色的圖像代表的含義,我們需要在圖像當中標註出來。

我們來看這個例子,這個例子是我在matplotlib的官網找到的,它繪製的是x和x^2,x^3函數圖像的差別。由於這三張圖是畫在一起的,為了能夠讓讀者分辨出究竟什麼顏色代表什麼函數,所以在左上角標上了圖例。

matplotlib繪圖教程,設置標籤與圖例

我們關注一下圖像的左上角,已經替我們標好了。藍色的是線性圖像,也就是x,黃色的是x的平方,綠色的是x的立方。

那麼這個圖例是怎麼標出來的呢?這裡需要做兩件事,第一件事就是在我們通過plot繪製圖像的時候需要

加上label,表示當前畫的這個圖像到底是什麼意思。這個label也就是我們看到左上角展示圖例當中的文字。比如linear, quadratic之類的就是label。另外一個就是在我們調用show這個函數之前,需要調用一下legend這個方法,這個方法就是繪製圖例用的。

我們來看下剛才那張圖的代碼:

<code>x = np.linspace(0, 2, 100)

plt.plot(x, x, label='linear')
plt.plot(x, x**2, label='quadratic')
plt.plot(x, x**3, label='cubic')

plt.xlabel('x label')
plt.ylabel('y label')

plt.title("Simple Plot")
plt.legend()
plt.show()
/<code>

它在子圖上的用法基本上一模一樣,我們來看個例子:

matplotlib繪圖教程,設置標籤與圖例

我們可以看到對於ax1這張子圖來說,我們做的事情和plt是一樣的,就是在調用plot的時候標上了label,然後在show之前調用了legend方法。

最後來介紹一下legend的參數,其實legend有很多參數,我們選擇其中比較常用的幾個說一說。剩下的大家可以去查看相關的文檔,我建議是用到的時候再去查,不過也可能一直沒機會用到。

首先是loc,loc是location的縮寫,顧名思義表示圖例放置的位置。傳入的參數表示一個方位,比如upper left, lower left, center left等等。上中下分別是upper,center,lower,左中右分別是left, center, right。我們可以自由組合這兩個方位,可以得到9種方位,再加上一種best,表示自適配最佳放置位置。

除此之外是常見的幾個參數,比如title,fontsize,edgecolor,shadow和facecolor。這幾個參數我們根據名字大概就猜得出來,有些剛才介紹title的時候講過了,效果是一樣的,只不過放置的位置不同而已。

除了這些之外還有像是設置圖例當中先放縮略圖還是先放文字的markerfirst,設置散點圖中散點數量的scatterpoints。以及一些關於間距文本長度的設置,這些都不是非常常用,就不一一贅述了。

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


本文始發於公眾號:TechFlow,求個關注


分享到:


相關文章: