主圖的各個(gè)部分
現(xiàn)在,讓我們深入看看Matplotlib的主圖的每一部分
主圖(Figure)
就是整張繪圖區(qū)域师痕。主圖和所有的從屬的子坐標(biāo)軸區(qū)域有聯(lián)系溃睹,少數(shù)的像坐標(biāo)軸區(qū)域的題目,圖例等等和畫(huà)布胰坟。(不用過(guò)于擔(dān)心畫(huà)布因篇,實(shí)際上是畫(huà)布去完成繪圖,但是對(duì)于調(diào)用函數(shù)的人來(lái)說(shuō)腕铸,或多或少它是不可見(jiàn)的)惜犀。一個(gè)主圖會(huì)包含一個(gè)或者多個(gè)坐標(biāo)軸區(qū)域。
生成一個(gè)主圖的最簡(jiǎn)單的方法是使用pyplot:
fig = plt.figure()# 生成一個(gè)沒(méi)有坐標(biāo)軸的主圖
fig, ax = plt.subplots()# 返回兩個(gè)值狠裹,第一個(gè)是主圖虽界,第二個(gè)是一套坐標(biāo)軸
fig, axs = plt.subplots(2,2)# 一個(gè)主圖和四個(gè)坐標(biāo)軸,按照2x2排列
把坐標(biāo)軸和主圖一起創(chuàng)建是很方便的涛菠,但是你也可以在創(chuàng)建主圖之后在添加坐標(biāo)軸區(qū)域莉御,這個(gè)也允許你添加跟多的復(fù)雜的坐標(biāo)軸屬性。
坐標(biāo)軸區(qū)域(Axes)
坐標(biāo)軸區(qū)域就是繪圖的區(qū)域俗冻,這是圖像加數(shù)據(jù)的區(qū)域礁叔。一個(gè)主圖可以包含多套坐標(biāo)軸區(qū)域,但是一套坐標(biāo)軸區(qū)域只能從屬于一個(gè)主圖迄薄。一個(gè)坐標(biāo)軸區(qū)域包含兩條或者三條坐標(biāo)軸琅关。坐標(biāo)軸的限制(極限)會(huì)和數(shù)據(jù)相關(guān),這個(gè)極限也可以通過(guò)axes.Axes.set_xlim()方法來(lái)控制讥蔽,坐標(biāo)軸的名字通過(guò)axes.Axes.set_title()控制涣易,axes.Axes.set_label()可以控制坐標(biāo)軸的標(biāo)簽。
坐標(biāo)軸(axis)
也就是數(shù)值軸冶伞。坐標(biāo)軸的屬性關(guān)注的是設(shè)定圖表的極限值和產(chǎn)生坐標(biāo)軸的標(biāo)志和坐標(biāo)軸的名稱新症。名稱的位置取決于Locator對(duì)象,標(biāo)簽式的字符串會(huì)被Formatter格式化响禽。Locator和Formatter會(huì)很好地控制標(biāo)識(shí)的位置和標(biāo)簽徒爹。
藝術(shù)家對(duì)象(Artist)
基本的,所有你在主圖上可以看到的東西都是一個(gè)藝術(shù)家對(duì)象(甚至是Figure對(duì)象芋类,Axes對(duì)象和坐標(biāo)軸axies對(duì)象)隆嗅。這個(gè)包含了Text對(duì)象,Line2D對(duì)象侯繁,collection對(duì)象胖喳,Patch對(duì)象等。當(dāng)主圖被繪制出來(lái)后巫击,所有的藝術(shù)家對(duì)象都會(huì)在畫(huà)布上被畫(huà)出來(lái)禀晓。大多數(shù)的藝術(shù)家對(duì)象都會(huì)被綁定在坐標(biāo)軸區(qū)域?qū)ο笊戏峥荒芄蚕碥运В膊荒芤苿?dòng)。
給繪圖函數(shù)輸入?yún)?shù)的類型
所有的繪圖函數(shù)的輸入?yún)?shù)都是numpy的數(shù)組或者numpy的ma.masked_arrary(帶掩碼的numpy數(shù)組)勺像,類數(shù)組類型的像panda數(shù)組或者numpy的矩陣有可能會(huì)不支持顷级。最好在畫(huà)圖之前先把它們轉(zhuǎn)化為numpy數(shù)組凫乖。
面向?qū)ο蟮慕缑婧屠L畫(huà)界面
就像上面提到的,使用Matplotlib有兩個(gè)至關(guān)重要的點(diǎn):
·明確地建立主圖和坐標(biāo)軸區(qū)域弓颈,對(duì)它們使用方法(就是面向?qū)ο蟮牟僮鞣椒ǎ?/p>
·依靠pyplot去自動(dòng)建立和管理主圖和坐標(biāo)軸帽芽,使用pyplot函數(shù)去繪圖
面向?qū)ο箫L(fēng)格:
x = np.linspace(0,2, 100)
fig, ax = plt.subplots()# 建立Figure對(duì)象和Axes對(duì)象
ax.plot(x, x,label='linear')
ax.plot(x, x**2,label='quadratic')
ax.plot(x, x**3,label='cubic')
#由于都是使用ax,因此都是在同一個(gè)坐標(biāo)軸區(qū)域繪圖
ax.set_xlabel('xlabel')# 設(shè)置x軸的名稱
ax.set_ylabel('ylabel')# 設(shè)置y軸名稱
ax.set_title("SimplePlot")# 給坐標(biāo)軸區(qū)域一個(gè)名字
ax.legend()#顯示圖例翔冀,如果沒(méi)有這個(gè)导街,曲線的label不會(huì)顯示
還有matplotlib風(fēng)格(不使用對(duì)象):
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('xlabel')
plt.ylabel('ylabel')
plt.title("SimplePlot")
plt.legend()
事實(shí)上還有第三種繪圖方法,在你把Matplotlib嵌入到一個(gè)GUI應(yīng)用程序里面的時(shí)候纤子,它會(huì)完全放棄pyplot搬瑰,甚至也不需要figure對(duì)象的創(chuàng)建。但是我們?cè)谶@里不討論控硼;
在交互式的平臺(tái)泽论,比如jupyter
notebook,我們推薦使用pyplot風(fēng)格卡乾,但是在大型工程里面我們推薦使用面向?qū)ο箫L(fēng)格翼悴。
后端
什么是后端?
很多在網(wǎng)站上和郵寄列表的文檔會(huì)涉及到后端這個(gè)詞幔妨,很多新手會(huì)對(duì)這個(gè)感到疑惑鹦赎。matplotlib注重于很多不同的使用情況,也注重對(duì)輸出的格式化陶冷。很多人在python shell上和matplotlib交互钙姊,在他們輸入命令的時(shí)候會(huì)讓繪圖窗口彈出來(lái)。很多人使用jupyter nodebook并且使用內(nèi)聯(lián)的繪圖方式來(lái)進(jìn)行快速的數(shù)據(jù)分析埂伦。還有一些人把matplotlib嵌入到用戶接觸式的應(yīng)用中煞额,比如wxpython,pygtk去建立豐富的應(yīng)用沾谜。一些人在批量的腳本中使用matplotlib膊毁,通過(guò)數(shù)字化仿真來(lái)生成圖片。還有一些人運(yùn)行網(wǎng)絡(luò)應(yīng)用服務(wù)去動(dòng)態(tài)地服務(wù)于繪圖基跑。
為了支持這些不同的用途婚温,matplotlib定位了不同的輸出,每一個(gè)這種能力就叫做一種后端媳否。前端就是用戶面對(duì)的代碼栅螟。相反后端在屏幕后把圖片畫(huà)出來(lái)荆秦。后端分成接觸式后端和非接觸式后端。
選擇(配置)一個(gè)后端
有三種配置后端的方式:
未完力图。步绸。。