姓名:閆偉? 學(xué)號(hào):15020150038
轉(zhuǎn)載自:https://zhuanlan.zhihu.com/p/46890207
【嵌牛導(dǎo)讀】:Matplotlib 是最常用的 2D 繪圖庫(kù)之一纺涤,也是一款很實(shí)用的數(shù)據(jù)可視化工具
【嵌牛鼻子】:Matplotlib
【嵌牛提問(wèn)】:怎么更改圖例上的標(biāo)簽名稱(chēng)颖系?如何設(shè)置刻度線堕阔?怎樣將比例設(shè)置為對(duì)數(shù)?我該怎么給圖表添加注釋和箭頭进苍?如何給我的圖表添加網(wǎng)格線捣域?
【嵌牛正文】:
本文收集了如何自定義你的 matplotlib 繪圖的常見(jiàn)問(wèn)題和答案,也可以作為 matplotlib 快速繪圖的速查表叔壤,但不是 matplotlib 的入門(mén)介紹繁堡。如果你對(duì)這個(gè)庫(kù)還不熟悉沈善,可以看看它的文檔。
文章涵蓋的話題包括圖表帖蔓、圖表屬性、圖例瞳脓、軸塑娇、注釋和保存圖表。
初步小貼士
首先劫侧,導(dǎo)入 matplotlib
import matplotlib.pyplot as plt
在 Jupyter Notebook 中埋酬,你可以把下面這行代碼包含在內(nèi),這樣每次想畫(huà)圖的時(shí)候就不用必須調(diào)用 plt.show()了烧栋。
%matplotlib inline
另一個(gè)方便的技巧是写妥,如果你不想出現(xiàn) <matplotlib.collections.PathCollection at 0x1182bc710> 這行惱人的信息,只需在你的代碼后面添加一個(gè)分號(hào)审姓,如下面第二張圖所示珍特。
之前:
之后:
圖表和子圖(Subplot)
問(wèn):我該怎么增加圖表的大小魔吐?
很多時(shí)候扎筒,圖表的默認(rèn)尺寸都很小莱找。你可以添加參數(shù) figsize,像下面這樣以英寸為單位指明圖形的高度和寬度嗜桌。
plt.figure(figsize=(20,10))
問(wèn):什么是子圖(subplot)奥溺?我該怎么創(chuàng)建和操作子圖?
子圖就是一組更小的軸骨宠,它們一起存在于單個(gè)圖中浮定。下面是 2X2 形式的 4 個(gè)子圖示例:
這些子圖是用下面這些代碼創(chuàng)建的。我們調(diào)用 plt.subplot层亿,并指明 3 個(gè)數(shù)字桦卒。它們指行、列和子圖的數(shù)量棕所。
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()
在上面的子圖中闸盔,圖中的文本是對(duì)這 3 個(gè)數(shù)字的引用。子圖編號(hào)的順序是左上方開(kāi)始的行琳省,從數(shù)字 1 開(kāi)始迎吵。例如,左上圖是子圖編號(hào) 1针贬,右上圖是子圖編號(hào) 2击费,左下圖是子圖編號(hào) 3,右下圖是子圖編號(hào) 4.
注意桦他,你必須調(diào)用 plt.subplot(2, 2, 1) 來(lái)激活子圖蔫巩。
問(wèn):我的子圖布局看著很丑,該怎么調(diào)整快压?
下面例子中圆仔,子圖之間靠的太近了,看著有點(diǎn)擠蔫劣。我們可以通過(guò)調(diào)用 plt.tight_layout() 來(lái)修正坪郭。它會(huì)清理子圖之間的填充部分,讓圖表看起來(lái)更清爽脉幢。
之前:
之后:
問(wèn):怎么向我的圖表添加網(wǎng)格線歪沃?
plt.grid(True)
風(fēng)格和屬性
問(wèn):如何修改圖表中線條的顏色/寬度/風(fēng)格?
你可以傳遞和設(shè)置參數(shù) color嫌松,linewidth 和 linestyle沪曙。
plt.plot(x, y, color = ‘green’ , linewidth = 2, linestyle = “-”)
下面是一些你可以選擇的線條風(fēng)格:
問(wèn):怎樣修改標(biāo)記的樣式或顏色?
你可以傳遞和設(shè)置參數(shù) marker 和 color萎羔,如下所示:
plt.scatter(x, y, marker = ‘o’, color = ‘red’)
這里是一些供你選擇的標(biāo)記:
問(wèn):怎么修改線條的透明度液走?
向圖表傳入 alpha 參數(shù)表示線條的透明度,它的設(shè)置范圍在 0 到 1 之間,其中 0 表示完全透明育灸,1 表示無(wú)透明腻窒。
plt.plot(x, y, alpha = 0.1)
下圖展示了當(dāng) alpha 分別為 0.9,0.5 和 0.1 時(shí)的透明效果:
圖例
問(wèn):該怎樣為我的圖表添加圖例?
如果你的圖表上沒(méi)有自動(dòng)出現(xiàn)圖例磅崭,你可以用如下代碼來(lái)顯示圖例儿子。
plt.legend()
問(wèn):該如何修改圖例出現(xiàn)的位置?
你可以向 loc 參數(shù)中傳入以下參數(shù):upper right砸喻,upper left柔逼,lower left,lower right, right, center left, center right, lower center, upper center, center割岛,分別表示右上角愉适,左上角,左下角癣漆,右下角维咸,右角,左中角惠爽,右中角癌蓖,下中心,上中心婚肆,中心位置租副。
plt.legend(loc = ‘lower right’);
問(wèn):該怎樣修改圖例中的標(biāo)簽名稱(chēng)?
方法1:
比方說(shuō)你有 10 個(gè)圖例項(xiàng)较性,你只想修改第一個(gè)圖例項(xiàng)中的標(biāo)簽用僧。將圖例保存到變量 L 之后,可以用“L.get_texts()[0]”調(diào)用圖例中的第一項(xiàng)赞咙,手動(dòng)設(shè)置為你想用的文本责循。在下面的例子中,我們將圖例修改為了‘line123’攀操。
L = plt.legend()get_texts()[0].set_text('line123')
方法2:
另外院仿,你可以創(chuàng)建一列標(biāo)簽名稱(chēng),設(shè)置圖例標(biāo)簽等于你創(chuàng)建的列表崔赌。
mylabels = ['happy', 'sad', 'nervous', 'angry', 'neutral']plt.legend(labels = my_labels)
問(wèn):如何修改圖例大幸庵耸别?
如果想設(shè)置具體圖表中的圖例大小健芭,你可以傳入 fontsize 參數(shù)。
plt.legend(fontsize = 10);
也可以不用數(shù)字表示字體大小秀姐,像下面這樣操作:
plt.legend(fontsize = 'x-large');
軸
問(wèn):如何命名 x 軸和 y 軸的標(biāo)簽慈迈?以及如何修改字體大小?
根據(jù)你想具體使用的哪個(gè)軸痒留,你可以叫他們‘ylabel’或‘xlabel’谴麦,如下所示。第一項(xiàng)就是你想讓軸使用的名稱(chēng)伸头。如果想設(shè)置字體大小匾效,像下面這樣嵌入 fontsize 參數(shù):
plt.ylabel('Income', fontsize = 15) #for y labelplt.xlabel('Age', fontsize = 15) #for x label
問(wèn):我該如何設(shè)置刻度線?
第一個(gè)參數(shù)設(shè)置刻度線所在的位置恤磷,第二個(gè)參數(shù)設(shè)置刻度線旁邊的標(biāo)簽面哼。
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”])
問(wèn):如何設(shè)置軸的長(zhǎng)度?
plt.ylim(-1.0,1.0) #for y axisplt.xlim(0, 50) #for x axis
問(wèn):如何將比例修改為對(duì)數(shù)扫步?
plt.yscale(“l(fā)og”) #for y axisplt.xsclae("log") #for x axis
注釋
問(wèn):如何向圖表添加注釋和箭頭魔策?
我們可以創(chuàng)建注釋?zhuān)⒅该髯⑨?xy 參數(shù)的坐標(biāo)。xytext 定義了標(biāo)簽的坐標(biāo)河胎。如果我們想添加箭頭闯袒,需要使用 arrowprops 來(lái)顯示箭頭。
plt.annotate(‘sentosa’, xy = (5.0, 3.5), xytext(4.25, 4.0), arrowprops={'color': 'red'})
保存圖表
按自己的需要自定義完圖表后游岳,就該保存了政敢。這里我們將示例中的圖表命名為“plot1”,用如下方式將圖表保存到你的工作目錄中吭历。
plt.savefig('plot1.jpg')
最后一點(diǎn)
如果你在 Jupyter Notebook 中畫(huà)了一個(gè)非常大的圖表的話堕仔,你的 Jupyter Notebook 會(huì)變得非常慢。
如果你將鼠標(biāo)懸停在圖形的左側(cè)晌区,會(huì)出現(xiàn)一個(gè)如下所示的灰色框摩骨。雙擊該灰色框,就能隱藏你的圖表朗若,從而讓 Jupyter Notebook 可以正常運(yùn)行恼五。這也有助于滾動(dòng)圖表。
希望本文對(duì)你使用 matplotlib 繪圖有所幫助哭懈。