淺談matplotlib.pyplot與axes的關(guān)系
最近在學(xué)習(xí)數(shù)據(jù)可視化,梳理一下其中一些諸如pandas繪圖、matplotlib繪圖、pyplot(plt)、axes等概念。
重要的事情說(shuō)三遍:axes不是axis!axes不是axis!axes不是axis!
重要的事情說(shuō)三遍:pyplot是接口不是對(duì)象!pyplot是接口不是對(duì)象!pyplot是接口不是對(duì)象!
很多書(shū)上一上來(lái)就直接import matplotlib.pypltot as plt
,然后就教你plt.xxx()
。這種方式固然沒(méi)錯(cuò),可問(wèn)題就出在了plt
只是一個(gè)interface,只是一個(gè)接口,連對(duì)象都算不上(仔細(xì)回想,你確實(shí)沒(méi)有實(shí)例化過(guò)任何一個(gè)名叫plt
類(lèi)型的對(duì)象)這給本來(lái)就對(duì)面向?qū)ο缶幊滩⒉缓苁煜さ奈?em>帶來(lái)無(wú)窮無(wú)盡的困擾。plt
這個(gè)接口的意義在于:
- 通過(guò)接口直接畫(huà)圖(這時(shí)候我們把這個(gè)接口看成一個(gè)黑盒,根本不要去管其中有些什么對(duì)象類(lèi)型)
- 通過(guò)接口實(shí)例化別的類(lèi)型的對(duì)象(如
figure
類(lèi)型axes
類(lèi)型等)
1.通過(guò)plt.xxx()直接繪圖
就像各種教程和書(shū)上的常規(guī)操作一樣,我們可以用plt.plot(), plt.bar()等繪制不同類(lèi)型的圖(部分總結(jié)如下表)
表一 plt中用于繪圖的部分函數(shù)
函數(shù)名 | 作用 |
---|---|
plt.bar() | 條形圖 |
plt.barh() | 橫排條形圖 |
plt.boxplot() | 箱線(xiàn)圖(plt.box()是另一個(gè)函數(shù)) |
plt.hist() | 頻率直方圖 |
plt.plot() | 折線(xiàn)圖 |
我們可以用plt
的其他一些函數(shù)來(lái)對(duì)圖表的標(biāo)題等進(jìn)行設(shè)置(部分總結(jié)如下表)
表二 plt中用于設(shè)置的部分函數(shù)
函數(shù)名 | 作用 |
---|---|
plt.title() | 設(shè)置圖表標(biāo)題 |
plt.grid() | 設(shè)置圖表網(wǎng)格 |
plt.xlabel();plt.ylabel | 設(shè)置x;y軸標(biāo)題 |
plt.xticks();plt.yticks() | 設(shè)置x;y軸刻度 |
plt.xlim();plt.ylim() | 設(shè)置x;y軸范圍 |
plt.annotate() | 設(shè)置標(biāo)注 |
(具體的參數(shù)和用法詳見(jiàn) https://matplotlib.org/api/pyplot_summary.html )
用plt繪圖的方便之處,同樣也是它最令人迷惑的地方,就是它沒(méi)有一個(gè)顯性的對(duì)象。
我們甚至可以調(diào)用pandas繪圖以后,用表二中的plt函數(shù)來(lái)對(duì)pandas生成的這個(gè)圖表進(jìn)行設(shè)置。
例程如下:
import matplotlib.pyplot as plt from pandas import Series data = Series([1.47,1.62,1.78,1.94,2.38,2.60],index=['2012','2013','2014','2015','2016','2017']) #注意下一行的對(duì)象是'data',它是一個(gè)series對(duì)象,調(diào)用的是pandas繪圖函數(shù) data.plot(label='income', color = 'r', linestyle=':', marker = 's')#具體的pandas繪圖之后會(huì)細(xì)講 #但接下來(lái)我們甚至可以調(diào)用plt的函數(shù)對(duì)它進(jìn)行設(shè)置 plt.title('Income chart') plt.xlabel('Year') plt.ylabel('income') plt.annotate('Largest point',xy=(5,2.60),xytext=(3,2.5), arrowprops=dict(arrowstyle='->')) plt.show()
上面這個(gè)例子就展示了pyplot
(plt
)的特點(diǎn),不用指明對(duì)象就能進(jìn)行畫(huà)圖和設(shè)置,當(dāng)我們?cè)谕粋€(gè)程序中的圖比較少的時(shí)候這是方便的,但當(dāng)我們同一個(gè)程序中的圖很多的時(shí)候,這種沒(méi)有顯性對(duì)象的方式會(huì)導(dǎo)致我們沒(méi)有辦法重新調(diào)用之前的圖(因?yàn)闆](méi)有對(duì)象名)也會(huì)給人一種很不踏實(shí)的感覺(jué)。
2.實(shí)例化figure和axes對(duì)象后繪圖
就像前文提到的,plt
只是一個(gè)接口而不是對(duì)象。
在matplotlib中,有兩個(gè)重要的對(duì)象類(lèi)型:figure
對(duì)象可以把它想成一張空白圖紙,在上面可以繪制一個(gè)或多個(gè)axes
對(duì)象(還可以有其他對(duì)象等)。axes
對(duì)象是一個(gè)圖像的主要部分(它包括了圖線(xiàn)、xy軸等部分)。
我們可以使用plt
接口生成figure
對(duì)象和axes
對(duì)象,然后對(duì)axes
對(duì)象調(diào)用方法來(lái)實(shí)現(xiàn)畫(huà)圖和設(shè)置。
總體思路是:
- 實(shí)例化figure對(duì)象
- 實(shí)例化axes對(duì)象
- 對(duì)axes對(duì)象調(diào)用方法進(jìn)行畫(huà)圖和設(shè)置
例程如下:
import matplotlib.pyplot as plt from pandas import Series data = Series([1.47,1.62,1.78,1.94,2.38,2.60],index=['2012','2013','2014','2015','2016','2017']) #調(diào)用plt接口,實(shí)例化figure1對(duì)象 figure1 = plt.figure(facecolor='w')#faceclolr設(shè)置背景顏色 #實(shí)例化ax1對(duì)象 ax1 = figure1.add_subplot(111)#ax1是figure1的第1行第一列的第1張圖表 #注意下一行的對(duì)象是'ax1',它是一個(gè)axes對(duì)象,調(diào)用的是matplotlib.axes繪圖函數(shù) ax1.plot(data,label='income', color = 'r', linestyle=':', marker = 's') #接下來(lái)我們調(diào)用ax1的方法對(duì)它進(jìn)行設(shè)置 ax1.set_title('Income chart') ax1.set_xlabel('Year') ax1.set_ylabel('income') ax1.annotate('Largest point',xy=(5,2.60),xytext=(3,2.5), arrowprops=dict(arrowstyle='->'))
用這種方式畫(huà)出來(lái)的圖,每一個(gè)對(duì)象都有它自己的名字,方便后面繼續(xù)調(diào)用、修改。代碼也就多了兩行實(shí)例化的過(guò)程,并沒(méi)有麻煩很多,個(gè)人很喜歡用這種方式畫(huà)圖(也給人一種很踏實(shí)的感覺(jué))。
類(lèi)比上面的表一和表二,給出對(duì)于axes對(duì)象的方法函數(shù)表:
表三 axes對(duì)象用于繪圖的部分方法函數(shù)
函數(shù)名 | 作用 |
---|---|
ax.bar() | 條形圖 |
ax.barh() | 橫排條形圖 |
ax.boxplot() | 箱線(xiàn)圖 |
ax.hist() | 頻率直方圖 |
ax.plot() | 折線(xiàn)圖 |
表四 axes對(duì)象中用于設(shè)置的部分方法函數(shù)
函數(shù)名 | 作用 |
---|---|
ax.set_title() | 設(shè)置圖表標(biāo)題 |
ax.set_xlabel(); ax.set_ylabel | 設(shè)置x;y軸標(biāo)題 |
ax.set_xticks(); ax.set_yticks() | 設(shè)置x;y軸刻度 |
ax.set_xlim(); ax.set_ylim() | 設(shè)置x;y軸范圍 |
ax.annotate() | 設(shè)置標(biāo)注 |
(具體的參數(shù)和用法詳見(jiàn) https://matplotlib.org/api/axes_api.html )
注意表一和表三,表二和表四的異同:
- 表一表二中的
plt
是固定的名字,不論畫(huà)什么都是plt.xxx()
,而表三和表四中ax.xxx()
中的ax
要改成你實(shí)例的對(duì)象名。 - 注意對(duì)比表二和表四,很多作用相同的東西,跑到了axes這里要多加一個(gè)
set_
用實(shí)例化axes的方式畫(huà)圖很重要,因?yàn)槎嘧訄D的繪制更是需要依賴(lài)axes對(duì)象。
我還會(huì)分兩期分別介紹一下axes與多子圖的繪制和axes與pandas繪圖的關(guān)系。
到此這篇關(guān)于淺談matplotlib.pyplot與axes的關(guān)系的文章就介紹到這了,更多相關(guān)matplotlib.pyplot axes內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- matplotlib.pyplot畫(huà)圖并導(dǎo)出保存的實(shí)例
- OpenCV里的imshow()和Matplotlib.pyplot的imshow()的實(shí)現(xiàn)
- matplotlib.pyplot繪圖顯示控制方法
- pycharm使用matplotlib.pyplot不顯示圖形的解決方法
- matplotlib.pyplot畫(huà)圖 圖片的二進(jìn)制流的獲取方法
- Python利用matplotlib.pyplot繪圖時(shí)如何設(shè)置坐標(biāo)軸刻度
- 淺談Matplotlib簡(jiǎn)介和pyplot的簡(jiǎn)單使用——文本標(biāo)注和箭頭
- 基于Python數(shù)據(jù)可視化利器Matplotlib,繪圖入門(mén)篇,Pyplot詳解
- 不同版本中Python matplotlib.pyplot.draw()界面繪制異常問(wèn)題的解決
相關(guān)文章
Pytorch矩陣乘法(torch.mul() 、 torch.mm() 和torch.m
在深度學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)的世界里,矩陣乘法是一項(xiàng)至關(guān)重要的操作,本文主要介紹了Pytorch矩陣乘法,包含了torch.mul() 、 torch.mm() 和torch.matmul()的區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03Python request post上傳文件常見(jiàn)要點(diǎn)
這篇文章主要介紹了Python request post上傳文件常見(jiàn)要點(diǎn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11詳解Python中 sys.argv[]的用法簡(jiǎn)明解釋
本篇文章主要介紹了詳解Python中 sys.argv[]的用法簡(jiǎn)明解釋?zhuān)【幱X(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12淺析python實(shí)現(xiàn)布隆過(guò)濾器及Redis中的緩存穿透原理
本文帶你了解了位圖的實(shí)現(xiàn),布隆過(guò)濾器的原理及 Python 中的使用,以及布隆過(guò)濾器如何應(yīng)對(duì) Redis 中的緩存穿透,相信你對(duì)布隆過(guò)濾器已經(jīng)有了一定的認(rèn)識(shí)2021-09-09python爬蟲(chóng)之requests庫(kù)使用代理方式
這篇文章主要介紹了python爬蟲(chóng)之requests庫(kù)使用代理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-1110個(gè)python爬蟲(chóng)入門(mén)實(shí)例(小結(jié))
這篇文章主要介紹了10個(gè)python爬蟲(chóng)入門(mén)實(shí)例(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11