1. 程式人生 > >matplotlib繪圖教程,設定標籤與圖例

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

大家好,歡迎大家閱讀週四資料處理專題,我們繼續介紹matplotlib作圖工具。

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

設定標題

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

基礎設定

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

在子圖中設定

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

我們看一個之前的例子,我們之前用下面這段程式碼同時畫出了兩個影象:

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()

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

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

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

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

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線條粗細。

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

軸標籤

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

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

如果是多個子圖,我們同樣操作subplot這個物件來進行設定。

設定圖例

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

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

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

那麼這個圖例是怎麼標出來的呢?這裡需要做兩件事,第一件事就是在我們通過plot繪製圖像的時候需要加上label,表示當前畫的這個影象到底是什麼意思。這個label也就是我們看到左上角展示圖例當中的文字。比如linear, quadratic之類的就是label。另外一個就是在我們呼叫show這個函式之前,需要呼叫一下legend這個方法,這個方法就是繪製圖例用的。

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

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()

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

我們可以看到對於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。以及一些關於間距文字長度的設定,這些都不是非常常用,就不一一贅述了。

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

原文連結,求個關注

本文使用 mdnice 排版

- END -
{{uploading-image-616067.png(uploadi