python神級程式設計師寫了一篇Matplotlib繪圖終極指南,輕鬆視覺化!
原文地址:https://www.jianshu.com/p/9fd7a6992741
python的意思是用外語打招呼
Matplotlib 是最常用的 2D 繪相簿之一,也是一款很實用的資料視覺化工具,但是有時候你畫出的圖很難正好符合心意。比如說你可能遇到下面這些問題:
怎麼更改圖例上的標籤名稱?如何設定刻度線?怎樣將比例設定為對數?我該怎麼給圖表添加註釋和箭頭?如何給我的圖表新增網格線?
python的意思是用外語打招呼
本文收集了如何自定義你的 matplotlib 繪圖的常見問題和答案,也可以作為 matplotlib 快速繪圖的速查表,但不是 matplotlib 的入門介紹。如果你對這個庫還不熟悉,可以看看它的文件。
文章涵蓋的話題包括圖表、圖表屬性、圖例、軸、註釋和儲存圖表。
初步小貼士
首先,匯入 matplotlib
import matplotlib.pyplot as plt
在 Jupyter Notebook 中,你可以把下面這行程式碼包含在內,這樣每次想畫圖的時候就不用必須呼叫 plt.show()了。
%matplotlib inline
另一個方便的技巧是,如果你不想出現 <matplotlib.collections.PathCollection at 0x1182bc710> 這行惱人的資訊,只需在你的程式碼後面新增一個分號,如下面第二張圖所示。
之前:
之後:
圖表和子圖(Subplot)
問:我該怎麼增加圖表的大小?
很多時候,圖表的預設尺寸都很小。你可以新增引數 figsize,像下面這樣以英寸為單位指明圖形的高度和寬度。
plt.figure(figsize=(20,10))
問:什麼是子圖(subplot)?我該怎麼建立和操作子圖?
子圖就是一組更小的軸,它們一起存在於單個圖中。下面是 2X2 形式的 4 個子圖示例:
這些子圖是用下面這些程式碼建立的。我們呼叫 plt.subplot,並指明 3 個數字。它們指行、列和子圖的數量。
for i in range (1, 5):
plt.subplot(2, 2, i)
plt.text(0.5,0.5, str((2, 2, i)), ha=’center’, fontsize = 10)
plt.tight_layout()
在上面的子圖中,圖中的文字是對這 3 個數字的引用。子圖編號的順序是左上方開始的行,從數字 1 開始。例如,左上圖是子圖編號 1,右上圖是子圖編號 2,左下圖是子圖編號 3,右下圖是子圖編號 4.
注意,你必須呼叫 plt.subplot(2, 2, 1) 來啟用子圖。
問:我的子圖佈局看著很醜,該怎麼調整?
下面例子中,子圖之間靠的太近了,看著有點擠。我們可以通過呼叫 plt.tight_layout() 來修正。它會清理子圖之間的填充部分,讓圖表看起來更清爽。
之前:
之後:
問:怎麼向我的圖表新增網格線?
plt.grid(True)
風格和屬性
問:如何修改圖表中線條的顏色/寬度/風格?
你可以傳遞和設定引數 color,linewidth 和 linestyle。
plt.plot(x, y, color = ‘green’ , linewidth = 2, linestyle = “-”)
下面是一些你可以選擇的線條風格:
問:怎樣修改標記的樣式或顏色?
你可以傳遞和設定引數 marker 和 color,如下所示:
plt.scatter(x, y, marker = ‘o’, color = ‘red’)
這裡是一些供你選擇的標記:
問:怎麼修改線條的透明度?
向圖表傳入 alpha 引數表示線條的透明度,它的設定範圍在 0 到 1 之間,其中 0 表示完全透明,1 表示無透明。
plt.plot(x, y, alpha = 0.1)
下圖展示了當 alpha 分別為 0.9,0.5 和 0.1 時的透明效果:
圖例
問:該怎樣為我的圖表新增圖例?
如果你的圖表上沒有自動出現圖例,你可以用如下程式碼來顯示圖例。
plt.legend()
問:該如何修改圖例出現的位置?
你可以向 loc 引數中傳入以下引數:upper right,upper left,lower left,lower right, right, center left, center right, lower center, upper center, center,分別表示右上角,左上角,左下角,右下角,右角,左中角,右中角,下中心,上中心,中心位置。
plt.legend(loc = ‘lower right’);
問:該怎樣修改圖例中的標籤名稱?
方法1:
比方說你有 10 個圖例項,你只想修改第一個圖例項中的標籤。將圖例儲存到變數 L 之後,可以用“L.get_texts()[0]”呼叫圖例中的第一項,手動設定為你想用的文字。在下面的例子中,我們將圖例修改為了‘line123’。
L = plt.legend()
get_texts()[0].set_text('line123')
方法2:
另外,你可以建立一列標籤名稱,設定圖例標籤等於你建立的列表。
mylabels = ['happy', 'sad', 'nervous', 'angry', 'neutral']
plt.legend(labels = my_labels)
問:如何修改圖例大小?
如果想設定具體圖表中的圖例大小,你可以傳入 fontsize 引數。
plt.legend(fontsize = 10);
也可以不用數字表示字型大小,像下面這樣操作:
plt.legend(fontsize = 'x-large');
軸
問:如何命名 x 軸和 y 軸的標籤?以及如何修改字型大小?
根據你想具體使用的哪個軸,你可以叫他們‘ylabel’或‘xlabel’,如下所示。第一項就是你想讓軸使用的名稱。如果想設定字型大小,像下面這樣嵌入 fontsize 引數:
plt.ylabel('Income', fontsize = 15) #for y label
plt.xlabel('Age', fontsize = 15) #for x label
問:我該如何設定刻度線?
第一個引數設定刻度線所在的位置,第二個引數設定刻度線旁邊的標籤。
plt.yticks([0,2,4,6,7,10], [“0”, “2B”, "4B”, “8B”, “10B”])
plt.xticks([0,1,2,3,4,5], [“0”, “1oz”, "2oz”, “3oz”, “4oz”])
問:如何設定軸的長度?
plt.ylim(-1.0,1.0) #for y axis
plt.xlim(0, 50) #for x axis
問:如何將比例修改為對數?
plt.yscale(“log”) #for y axis
plt.xsclae("log") #for x axis
註釋
問:如何向圖表添加註釋和箭頭?
我們可以建立註釋,並指明註釋 xy 引數的座標。xytext 定義了標籤的座標。如果我們想新增箭頭,需要使用 arrowprops 來顯示箭頭。
plt.annotate(‘sentosa’, xy = (5.0, 3.5), xytext(4.25, 4.0), arrowprops={'color': 'red'})
儲存圖表
按自己的需要自定義完圖表後,就該儲存了。這裡我們將示例中的圖表命名為“plot1”,用如下方式將圖表儲存到你的工作目錄中。
plt.savefig('plot1.jpg')
最後一點
如果你在 Jupyter Notebook 中畫了一個非常大的圖表的話,你的 Jupyter Notebook 會變得非常慢。
如果你將滑鼠懸停在圖形的左側,會出現一個如下所示的灰色框。雙擊該灰色框,就能隱藏你的圖表,從而讓 Jupyter Notebook 可以正常執行。這也有助於滾動圖表。
希望本文對你使用 matplotlib 繪圖有所幫助