1. 程式人生 > >python神級程式設計師寫了一篇Matplotlib繪圖終極指南,輕鬆視覺化!

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 繪圖有所幫助