Python數(shù)據(jù)可視化(第2版)課件 第5、6章 子圖的繪制及坐標(biāo)軸共享;坐標(biāo)軸的定制_第1頁(yè)
Python數(shù)據(jù)可視化(第2版)課件 第5、6章 子圖的繪制及坐標(biāo)軸共享;坐標(biāo)軸的定制_第2頁(yè)
Python數(shù)據(jù)可視化(第2版)課件 第5、6章 子圖的繪制及坐標(biāo)軸共享;坐標(biāo)軸的定制_第3頁(yè)
Python數(shù)據(jù)可視化(第2版)課件 第5、6章 子圖的繪制及坐標(biāo)軸共享;坐標(biāo)軸的定制_第4頁(yè)
Python數(shù)據(jù)可視化(第2版)課件 第5、6章 子圖的繪制及坐標(biāo)軸共享;坐標(biāo)軸的定制_第5頁(yè)
已閱讀5頁(yè),還剩162頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第5章子圖的繪制及坐標(biāo)軸共享《Python數(shù)據(jù)可視化(第2版)

》學(xué)習(xí)目標(biāo)/Target

了解子圖,能夠歸納子圖的概念以及布局結(jié)構(gòu)

掌握繪制等分區(qū)域子圖的方式,能夠通過subplot()和subplots()函數(shù)將畫布規(guī)劃為矩陣區(qū)域,并根據(jù)編號(hào)或索引選擇一個(gè)或多個(gè)區(qū)域來繪制子圖

掌握繪制跨越區(qū)域子圖的方式,能夠通過subplot2grid()函數(shù)將畫布規(guī)劃為矩陣區(qū)域,并選擇跨越多行或多列的區(qū)域繪制子圖學(xué)習(xí)目標(biāo)/Target

掌握繪制自定義區(qū)域子圖的方式,能夠根據(jù)需求創(chuàng)建網(wǎng)格布局結(jié)構(gòu),并基于此布局結(jié)構(gòu)選擇相應(yīng)的區(qū)域繪制子圖

掌握共享子圖坐標(biāo)軸的方式,能夠共享相鄰、非相鄰或同一子圖的坐標(biāo)軸

掌握子圖布局技巧,能夠通過約束布局和緊密布局合理排列多子圖的位置章節(jié)概述/Summary為了更全面且深入地解讀數(shù)據(jù),用戶通常會(huì)以一組相關(guān)的圖表形式并排顯示在同一個(gè)窗口中,以便從多個(gè)角度比較和分析不同數(shù)據(jù)之間的關(guān)系,或展示同一數(shù)據(jù)的不同特征。為滿足這一需求,Matplotlib引入了子圖的概念,并提供了相應(yīng)的繪制子圖和管理子圖的功能,通過這些功能可以輕松實(shí)現(xiàn)在同一窗口中同時(shí)展示多張圖表的效果。本章將詳細(xì)介紹子圖的相關(guān)知識(shí),包括子圖的繪制、子圖坐標(biāo)軸的共享以及子圖的布局技巧。目錄/Contents01子圖概述02繪制等分區(qū)域的子圖03繪制跨越區(qū)域的子圖目錄/Contents04繪制自定義區(qū)域的子圖05共享子圖的坐標(biāo)軸06子圖的布局技巧子圖概述5.15.1子圖概述了解子圖,能夠歸納子圖的概念以及布局結(jié)構(gòu)學(xué)習(xí)目標(biāo)5.1子圖概述子圖的介紹子圖在數(shù)據(jù)可視化中扮演著重要的角色,Matplotlib允許用戶將多個(gè)相關(guān)圖表組織在一個(gè)畫布上,以便直觀地比較和展示不同數(shù)據(jù)之間的關(guān)系。子圖是指在同一個(gè)畫布上繪制的每個(gè)圖表,其類型沒有限制,可以單獨(dú)地呈現(xiàn)一種特定的圖表類型。用戶可以將這些圖表按照一定的排列方式組織在一起,以確定每個(gè)子圖在整個(gè)畫布的位置。5.1子圖概述兩種布局結(jié)構(gòu)為了靈活地管理整個(gè)窗口中所有子圖的布置和排列方式,并根據(jù)需求調(diào)整子圖所占區(qū)域的大小,Matplotlib中主要提供了兩種布局結(jié)構(gòu):網(wǎng)格布局和自由布局。網(wǎng)格布局可以將畫布規(guī)劃成由行和列組成的矩陣區(qū)域,之后根據(jù)行數(shù)和列數(shù)在指定位置的區(qū)域上繪制子圖。這種方式適合于創(chuàng)建規(guī)矩的布局結(jié)構(gòu),可以在畫布中放置大量的子圖,并且能夠比較靈活地控制它們的位置和大小。網(wǎng)格布局自由布局不用受到網(wǎng)格區(qū)域的限制,它允許用戶在畫布中自由放置子圖,并且可以根據(jù)具體需求自由調(diào)整每個(gè)子圖的大小和位置。這種方式適合于創(chuàng)建自定義的、不規(guī)則的布局結(jié)構(gòu),用戶可以更精確地控制子圖的位置和大小。自由布局5.1子圖概述兩種布局結(jié)構(gòu)這兩種布局方式各有各的優(yōu)勢(shì),具體使用哪種方式取決于布局需求和個(gè)人偏好。網(wǎng)格布局是比較基礎(chǔ)的布局方式,也是本章重點(diǎn)要介紹的布局結(jié)構(gòu)。5.1子圖概述網(wǎng)格布局的介紹在網(wǎng)格布局中,整個(gè)畫布被均勻地規(guī)劃成M行N列的矩陣區(qū)域,每個(gè)區(qū)域的大小都是相等的,以便子圖充分展示。5.1子圖概述網(wǎng)格布局的介紹用戶既可以選擇一個(gè)區(qū)域來放置一個(gè)子圖,也可以跨行或跨列選擇多個(gè)區(qū)域來放置子圖,以實(shí)現(xiàn)更為復(fù)雜的排列結(jié)構(gòu)。為了便于用戶獲取到目標(biāo)位置的區(qū)域,可以通過指定行索引、列索引或者編號(hào)訪問,其中行索引和列索引是從0開始的整數(shù),編號(hào)是從1開始的,之后按照從左到右、從上到下的順序遞增。繪制等分區(qū)域的子圖5.25.2.1繪制單子圖掌握繪制單子圖的方式,能夠通過subplot()函數(shù)將畫布規(guī)劃為矩陣區(qū)域,并根據(jù)編號(hào)選擇一個(gè)區(qū)域來繪制子圖學(xué)習(xí)目標(biāo)5.2.1繪制單子圖subplot()的語(yǔ)法格式pyplot模塊提供了subplot()函數(shù),該函數(shù)用于根據(jù)指定的行數(shù)和列數(shù)將畫布規(guī)劃為矩陣區(qū)域,之后在指定位置的區(qū)域上繪制單個(gè)子圖。subplot(*args,

projection=None,sharex=False,sharey=False,**kwargs)*args:可選參數(shù),用于確定矩陣區(qū)域的行數(shù)和列數(shù),以及當(dāng)前操作區(qū)域的編號(hào),默認(rèn)值為(1,1,1)。該參數(shù)支持以下幾種形式的值:①一個(gè)三位整數(shù):各位的數(shù)字從左到右依次表示區(qū)域的行數(shù)和列數(shù)以及當(dāng)前操作區(qū)域的編號(hào)。②三個(gè)整數(shù):每個(gè)整數(shù)分別表示區(qū)域的行數(shù)和列數(shù)以及當(dāng)前操作區(qū)域的編號(hào)。

③SubplotSpec類的對(duì)象,表示子圖的網(wǎng)格布局結(jié)構(gòu)。5.2.1繪制單子圖subplot()的語(yǔ)法格式pyplot模塊提供了subplot()函數(shù),該函數(shù)用于根據(jù)指定的行數(shù)和列數(shù)將畫布規(guī)劃為矩陣區(qū)域,之后在指定位置的區(qū)域上繪制單個(gè)子圖。subplot(*args,

projection=None,sharex=False,sharey=False,**kwargs)projection:表示繪圖所需的投影類型,默認(rèn)投影類型為二維直角坐標(biāo)系,此外還支持以下取值。①'aitoff':Aitoff投影,適用于天文學(xué)數(shù)據(jù)。②'hammer':Hammer投影,適用于繪制全球地圖。③'lambert':Lambert投影,適用于繪制區(qū)域地圖。④'mollweide':Mollweide投影,適用于繪制全球地圖。⑤'polar':投影類型是極坐標(biāo)系。5.2.1繪制單子圖subplot()的語(yǔ)法格式pyplot模塊提供了subplot()函數(shù),該函數(shù)用于根據(jù)指定的行數(shù)和列數(shù)將畫布規(guī)劃為矩陣區(qū)域,之后在指定位置的區(qū)域上繪制單個(gè)子圖。subplot(*args,

projection=None,sharex=False,sharey=False,**kwargs)sharex,sharey:表示是否共享子圖的x軸或y軸。subplot()函數(shù)會(huì)返回一個(gè)Axes類及其子類的對(duì)象,表示子圖要繪制的區(qū)域。使用Figure類對(duì)象的add_subplot()方法也可以繪制單子圖,此方式與subplot()函數(shù)的功能是等價(jià)的,參數(shù)的用法完全相同。5.2.1繪制單子圖繪制單個(gè)子圖#彈出新窗口顯示圖表%matplotlibautoimportmatplotlib.pyplotasplt#將畫布規(guī)劃3行2列的矩陣區(qū)域,選擇編號(hào)為6的區(qū)域ax_one=plt.subplot(326)ax_one.plot([1,2,3,4,5])#阻塞腳本的執(zhí)行,直到窗口被關(guān)閉才會(huì)繼續(xù)執(zhí)行plt.show(block=True)示例:規(guī)劃3行2列的矩陣區(qū)域,并在編號(hào)6的區(qū)域中繪制一個(gè)子圖5.2.1繪制單子圖多學(xué)一招:JupyterNotebook的繪圖模式JupyterNotebook工具運(yùn)行Matplotlib程序時(shí),默認(rèn)會(huì)以靜態(tài)圖片的形式顯示運(yùn)行結(jié)果,此時(shí)的圖片不支持放大或縮小等交互操作。實(shí)際上,JupyterNotebook支持兩種繪圖模式,分別為靜態(tài)繪圖模式和交互式繪圖模式。5.2.1繪制單子圖多學(xué)一招:JupyterNotebook的繪圖模式1.靜態(tài)繪圖模式在靜態(tài)繪圖模式下,繪制的圖表或圖形將以靜態(tài)圖片的形式顯示在JupyterNotebook的輸出區(qū)域中,不提供用戶交互操作。當(dāng)使用Matplotlib進(jìn)行繪圖時(shí),默認(rèn)情況下就是使用靜態(tài)繪圖模式。開發(fā)者可以在Matplotlib程序中顯式添加魔術(shù)命令“%matplotlib

inline”,啟用靜態(tài)繪圖模式,在輸出區(qū)域中顯示圖表或圖形。5.2.1繪制單子圖多學(xué)一招:JupyterNotebook的繪圖模式2.交互式繪圖模式在交互式繪圖模式下,繪制的圖表或圖形將以單獨(dú)窗口的形式顯示,窗口上方添加一組控制按鈕,允許用戶對(duì)圖形進(jìn)行交互操作,比如平移、縮放、存儲(chǔ)等。開發(fā)者可以在Matplotlib程序中顯式添加魔術(shù)命令%matplotlibauto或%matplotlibnotebook,啟用交互式繪圖模式,在彈出的窗口中顯示圖表或圖形。5.2.1繪制單子圖多學(xué)一招:JupyterNotebook的繪圖模式需要注意的是,Matplotlib程序中添加完設(shè)置繪圖模式的魔術(shù)命令后,可能會(huì)出現(xiàn)延遲設(shè)置繪圖模式的現(xiàn)象。因此,這里建議大家重啟服務(wù),即在JupyterNotebook工具的菜單欄中選擇“Kernel”→“Restart”,之后在彈出的“重啟內(nèi)核?”窗口中選擇重啟即可。5.2.2實(shí)例1:2023年11月規(guī)模以上工業(yè)月度同比情況掌握實(shí)例1的目標(biāo)和思路,能夠編寫程序來連續(xù)繪制三個(gè)子圖學(xué)習(xí)目標(biāo)5.2.2實(shí)例1:2023年11月規(guī)模以上工業(yè)月度同比情況我國(guó)工業(yè)經(jīng)濟(jì)現(xiàn)狀2023年11月,我國(guó)規(guī)模以上工業(yè)保持穩(wěn)定增長(zhǎng),制造業(yè)、高技術(shù)產(chǎn)業(yè)和裝備制造業(yè)等領(lǐng)域表現(xiàn)強(qiáng)勁,產(chǎn)量逐漸增長(zhǎng),為經(jīng)濟(jì)發(fā)展提供了堅(jiān)實(shí)支撐。工業(yè)經(jīng)濟(jì)正逐步走出疫情影響,呈現(xiàn)出良好發(fā)展勢(shì)頭。5.2.2實(shí)例1:2023年11月規(guī)模以上工業(yè)月度同比情況工業(yè)經(jīng)濟(jì)的數(shù)據(jù)月份規(guī)模以上工業(yè)同比增速(%)鋼材同比增速(%)十種有色金屬同比增速(%)2022年11月2.27.18.812月1.3-2.67.32023年1-2月2.43.69.83月3.98.16.94月5.65.06.15月3.5-1.35.16月4.45.46.17月3.714.54.28月4.511.46.19月4.55.57.310月4.63.08.211月6.64.27.1規(guī)模以上工業(yè)、鋼材、十種有色金屬同比增長(zhǎng)速度下面在同一畫布上繪制三個(gè)子圖:第1個(gè)子圖位于畫布上方,寬度與畫布相等,高度占據(jù)畫布的三分之一,用于展示規(guī)模以上工業(yè)的同比增長(zhǎng)速度。第2個(gè)子圖位于畫布中間,寬度與高度同上圖,用于展示鋼材的同比增長(zhǎng)速度。第3個(gè)子圖位于畫布下方,寬度與高度同上圖,用于展示十種有色金屬的同比增長(zhǎng)速度。5.2.2實(shí)例1:2023年11月規(guī)模以上工業(yè)月度同比情況實(shí)例1的需求5.2.3繪制多子圖掌握繪制多子圖的方式,能夠通過subplots()函數(shù)將畫布規(guī)劃為矩陣區(qū)域,并根據(jù)索引選擇多個(gè)區(qū)域來繪制子圖學(xué)習(xí)目標(biāo)5.2.3繪制多子圖subplots()的語(yǔ)法格式pyplot模塊提供了subplots()函數(shù),該函數(shù)用于根據(jù)指定的行數(shù)和列數(shù)將畫布規(guī)劃為矩陣區(qū)域,之后可以在所有的區(qū)域上繪制多個(gè)子圖。subplots(nrows=1,

ncols=1,

*,

sharex=False,

sharey=False,

……,

subplot_kw=None,

gridspec_kw=None,

**fig_kw)nrows:表示矩陣區(qū)域的行數(shù),默認(rèn)值為1。ncols:表示矩陣區(qū)域的列數(shù),默認(rèn)值為1。sharex,sharey:表示是否共享子圖的x軸或y軸。gridspec_kw:表示用于控制布局結(jié)構(gòu)屬性的字典。5.2.3繪制多子圖subplots()的語(yǔ)法格式pyplot模塊提供了subplots()函數(shù),該函數(shù)用于根據(jù)指定的行數(shù)和列數(shù)將畫布規(guī)劃為矩陣區(qū)域,之后可以在所有的區(qū)域上繪制多個(gè)子圖。subplots(nrows=1,

ncols=1,

*,

sharex=False,

sharey=False,

……,

subplot_kw=None,

gridspec_kw=None,

**fig_kw)squeeze:表示是否將返回的Axes對(duì)象的數(shù)組縮減為一個(gè)維度,默認(rèn)值為True。①當(dāng)參數(shù)squeeze的值為True時(shí),如果參數(shù)nrows和ncols的值均為1,則subplots()函數(shù)會(huì)返回一個(gè)Axes對(duì)象;如果參數(shù)nrows和ncols的值只有一個(gè)為1,則subplots()函數(shù)會(huì)返回一個(gè)包含Axes對(duì)象的一維數(shù)組;如果參數(shù)nrows和ncols的值都大于1,則會(huì)一個(gè)包含Axes對(duì)象的二維數(shù)組或嵌套列表。②當(dāng)參數(shù)squeeze的值為False時(shí),subplots()函數(shù)不會(huì)縮減維度,而是直接返回一個(gè)包含Axes對(duì)象的二維數(shù)組或嵌套列表。5.2.3繪制多子圖subplots()的語(yǔ)法格式pyplot模塊提供了subplots()函數(shù),該函數(shù)用于根據(jù)指定的行數(shù)和列數(shù)將畫布規(guī)劃為矩陣區(qū)域,之后可以在所有的區(qū)域上繪制多個(gè)子圖。subplots(nrows=1,

ncols=1,

*,

sharex=False,

sharey=False,

……,

subplot_kw=None,

gridspec_kw=None,

**fig_kw)subplots()函數(shù)會(huì)返回兩個(gè)值fig和ax,其中fig是一個(gè)表示畫布的Figure對(duì)象,ax是Axes類的對(duì)象或者包含一組Axes類對(duì)象的數(shù)組。5.2.3繪制多子圖繪制多個(gè)子圖#將畫布規(guī)劃為2行2列的矩陣區(qū)域fig,ax_arr=plt.subplots(2,2)#選擇左上角的區(qū)域,繪制第一個(gè)子圖ax_one=ax_arr[0,0]ax_one.plot([1,2,3,4,5])……#選擇右下角的區(qū)域,繪制第四個(gè)子圖ax_fou=ax_arr[1,1]ax_fou.plot([1,2,3,4,5])示例:規(guī)劃2行2列的矩陣區(qū)域,并在所有的區(qū)域上繪制子圖5.2.4實(shí)例2:部分國(guó)家養(yǎng)貓與養(yǎng)狗人群比例掌握實(shí)例2的目標(biāo)和思路,能夠編寫程序來一次繪制兩個(gè)子圖學(xué)習(xí)目標(biāo)5.2.4實(shí)例2:部分國(guó)家養(yǎng)貓與養(yǎng)狗人群比例養(yǎng)寵物的現(xiàn)狀現(xiàn)代社會(huì),寵物已經(jīng)成為許多人生活中不可或缺的一部分,它們不僅能給主人帶來快樂,還能提供無(wú)條件的愛和支持。在眾多寵物中,貓和狗無(wú)疑是最受歡迎的兩種選擇。然而有趣的是,不同國(guó)家對(duì)于養(yǎng)貓和養(yǎng)狗的喜好程度卻有所不同。5.2.4實(shí)例2:部分國(guó)家養(yǎng)貓與養(yǎng)狗人群比例養(yǎng)貓和養(yǎng)狗的比例數(shù)據(jù)國(guó)家養(yǎng)貓人群比例(%)養(yǎng)狗人群比例(%)中國(guó)1925加拿大3333巴西2858澳大利亞2939日本1415墨西哥2464俄羅斯5729韓國(guó)623瑞士2622土耳其1511英國(guó)2727美國(guó)3950規(guī)模以上工業(yè)、鋼材、十種有色金屬同比增長(zhǎng)速度下面在同一畫布上繪制兩張條形圖:以左右并列的方式并排顯示,分別展示部分國(guó)家養(yǎng)貓人群和養(yǎng)狗人群的比例。將國(guó)家一列的數(shù)據(jù)作為條形圖的刻度標(biāo)簽。將養(yǎng)貓人群比例和養(yǎng)狗人群比例這兩列的數(shù)據(jù)被作為條形的長(zhǎng)度。5.2.4實(shí)例2:部分國(guó)家養(yǎng)貓與養(yǎng)狗人群比例實(shí)例2的需求繪制跨越區(qū)域的子圖5.35.3.1繪制跨區(qū)域的單子圖掌握繪制單子圖的方式,能夠通過subplot2grid()函數(shù)將畫布規(guī)劃為矩陣區(qū)域,并選擇跨越多行或多列的區(qū)域繪制子圖學(xué)習(xí)目標(biāo)5.3.1繪制跨區(qū)域的單子圖subplot2grid()的語(yǔ)法格式pyplot模塊提供了subplot2grid()函數(shù),該函數(shù)會(huì)根據(jù)指定的行數(shù)和列數(shù)將畫布規(guī)劃為矩陣區(qū)域,在指定位置的區(qū)域上通過跨行或跨列調(diào)整區(qū)域的大小,之后在調(diào)整好的區(qū)域上繪制子圖。subplot2grid(shape,

loc,

rowspan=1,

colspan=1,

fig=None,

**kwargs)shape:表示規(guī)劃的矩陣區(qū)域,該參數(shù)的值是一個(gè)包含兩個(gè)整型數(shù)據(jù)的元組,其中第1個(gè)元素表示規(guī)劃區(qū)域的行數(shù),第2個(gè)元素表示規(guī)劃區(qū)域的列數(shù)。loc:表示子圖要繪制在哪個(gè)區(qū)域的位置,該參數(shù)的值是一個(gè)包含兩個(gè)整型數(shù)據(jù)的元組,其中第1個(gè)元素表示子圖所在的行索引,第2個(gè)元素表示子圖所在的列索引,索引從0開始。rowspan:表示區(qū)域跨越的行數(shù),默認(rèn)值為1。colspan:表示區(qū)域跨越的列數(shù),默認(rèn)值為1。subplot2grid()函數(shù)會(huì)返回一個(gè)Axes類或其子類的對(duì)象。5.3.1繪制跨區(qū)域的單子圖繪制單個(gè)子圖%matplotlibautoimportmatplotlib.pyplotasplt#將畫布規(guī)劃為2行3列的矩陣區(qū)域,#在跨越兩行兩列的區(qū)域中繪制子圖ax=plt.subplot2grid((2,3),(0,1),

rowspan=2,colspan=2)ax.plot([1,2,3,4,5])plt.show(block=True)示例:規(guī)劃2行3列的矩陣區(qū)域,并在跨越兩行和兩列的區(qū)域中繪制子圖5.3.2實(shí)例3:2023年抖音和快手用戶畫像對(duì)比掌握實(shí)例3的目標(biāo)和思路,能夠編寫程序來連續(xù)繪制三個(gè)子圖學(xué)習(xí)目標(biāo)5.3.2實(shí)例3:2023年抖音和快手用戶畫像對(duì)比養(yǎng)寵物的現(xiàn)狀2023年社交媒體已經(jīng)成為了讓人們追逐潮流、展示才華和與他人互動(dòng)的主要平臺(tái)。而在這個(gè)日益競(jìng)爭(zhēng)激烈的市場(chǎng)中,抖音和快手從諸多社交應(yīng)用中脫穎而出,成為無(wú)數(shù)用戶追捧的熱門選擇。然而,盡管它們都以短視頻為特色,卻展示出了截然不同的用戶畫像。5.3.2實(shí)例3:2023年抖音和快手用戶畫像對(duì)比抖音和快手的用戶數(shù)據(jù)城市分類抖音用戶比例(%)快手用戶比例(%)五線城市12.114.4四線城市17.118.9三線城市16.717.5二線城市16.315.1新一線城市16.513.9一線城市5.94.5抖音和快手平臺(tái)用戶城市分布5.3.2實(shí)例3:2023年抖音和快手用戶畫像對(duì)比抖音和快手的用戶數(shù)據(jù)年齡區(qū)間抖音用戶比例(%)快手用戶比例(%)18歲以下5.88.318~24歲13.211.025~34歲23.421.935~44歲23.425.445歲以上24.826.2抖音和快手平臺(tái)用戶年齡分布下面根據(jù)表格數(shù)據(jù)繪制三個(gè)子圖:第一個(gè)子圖位于畫布上方,寬度與畫布等寬,高度占據(jù)畫布的三分之一,它是柱形圖,用于展示抖音和快手平臺(tái)用戶城市分布情況。其他兩個(gè)子圖位于畫布下方,它們的寬度和高度相等,其中寬度占據(jù)畫布的二分之一,高度占據(jù)畫布的三分之二,它們都是條形圖,分別展示抖音平臺(tái)和快手平臺(tái)的用戶年齡分布情況。5.3.2實(shí)例3:2023年抖音和快手用戶畫像對(duì)比實(shí)例3的需求繪制自定義區(qū)域的子圖5.45.4繪制自定義區(qū)域的子圖掌握繪制自定義區(qū)域子圖的方式,能夠根據(jù)需求創(chuàng)建網(wǎng)格布局結(jié)構(gòu),并基于此結(jié)構(gòu)選擇相應(yīng)的區(qū)域繪制子圖學(xué)習(xí)目標(biāo)5.4繪制自定義區(qū)域的子圖網(wǎng)格布局結(jié)構(gòu)為了能夠更靈活地調(diào)整子圖的位置,用戶可以根據(jù)自己的需求創(chuàng)建一個(gè)網(wǎng)格布局結(jié)構(gòu),并根據(jù)網(wǎng)格布局結(jié)構(gòu)劃分畫布為指定行數(shù)和列數(shù)的矩陣區(qū)域,將一些區(qū)域進(jìn)行調(diào)整得到最終繪圖的區(qū)域,之后便可以在這些自定義的區(qū)域上繪制子圖。5.4繪制自定義區(qū)域的子圖創(chuàng)建GridSpec對(duì)象的方式Matplotlib的gridspec模塊中提供了一個(gè)GridSpec類,通過實(shí)例化GridSpec類的對(duì)象可以創(chuàng)建一個(gè)網(wǎng)格布局結(jié)構(gòu)。Matplotlib中提供了兩種方式創(chuàng)建GridSpec類的對(duì)象,一種方式是GridSpec類的構(gòu)造方法,另一種方式是通過畫布對(duì)象調(diào)用add_gridspec()方法。通過GridSpec類的構(gòu)造方法創(chuàng)建GridSpec類的對(duì)象通過畫布對(duì)象調(diào)用add_gridspec()方法創(chuàng)建GridSpec類的對(duì)象方式一:方式二:5.4繪制自定義區(qū)域的子圖GridSpec類的構(gòu)造方法1.GridSpec類的構(gòu)造方法GridSpec(nrows,

ncols,

figure=None,

left=None,

bottom=None,

right=None,

top=None,

wspace=None,

hspace=None,

width_ratios=None,

height_ratios=None)nrows:表示網(wǎng)格布局結(jié)構(gòu)的行數(shù)。ncols:表示網(wǎng)格布局結(jié)構(gòu)的列數(shù)。figure:表示網(wǎng)格布局結(jié)構(gòu)應(yīng)用的畫布。left,bottom,right,top:用于設(shè)置子圖區(qū)域相對(duì)于畫布的邊界位置,取值為0~1之間的浮點(diǎn)數(shù)。wspace:表示子圖之間預(yù)留的寬度。hspace:表示子圖之間預(yù)留的高度。5.4繪制自定義區(qū)域的子圖GridSpec類的構(gòu)造方法1.GridSpec類的構(gòu)造方法通過GridSpec類的構(gòu)造方法創(chuàng)建一個(gè)3行3列的網(wǎng)格布局結(jié)構(gòu)。importmatplotlib.gridspecasgsgs.GridSpec(ncols=3,nrows=3)5.4繪制自定義區(qū)域的子圖add_gridspec()的語(yǔ)法格式2.add_gridspec()方法add_gridspec(nrows=1,

ncols=1,

**kwargs)參數(shù)nrows和ncols分別表示網(wǎng)格布局結(jié)構(gòu)的行數(shù)和列數(shù),它們的默認(rèn)值都為1。add_gridspec()方法是Figure

類提供的方法,用于在畫布上添加一個(gè)網(wǎng)格布局結(jié)構(gòu)。fig=plt.figure()fig.add_gridspec(3,3)5.4繪制自定義區(qū)域的子圖根據(jù)網(wǎng)格布局結(jié)構(gòu)創(chuàng)建區(qū)域GridSpec類對(duì)象與數(shù)組的使用方式相似,它也可以通過索引或切片的形式訪問每個(gè)子圖的區(qū)域,每個(gè)元素其實(shí)一個(gè)SubplotSpec類的對(duì)象。Matplotlib中提供了在畫布中快速根據(jù)網(wǎng)格布局結(jié)構(gòu)創(chuàng)建區(qū)域的方式,即調(diào)用subplot()函數(shù)或add_subplot()方法時(shí)直接傳入SubplotSpec類的對(duì)象。5.4繪制自定義區(qū)域的子圖根據(jù)網(wǎng)格布局結(jié)構(gòu)創(chuàng)建區(qū)域spec3=gs.GridSpec(ncols=3,nrows=3)ax1=plt.subplot(spec3[0,:])ax1.plot([1,2,3,4,5])ax2=plt.subplot(spec3[1,:2])ax2.plot([1,2,3,4,5])ax3=plt.subplot(spec3[1:,2])ax3.plot([1,2,3,4,5])ax4=plt.subplot(spec3[2,0])ax4.plot([1,2,3,4,5])ax5=plt.subplot(spec3[2,1])ax5.plot([1,2,3,4,5])示例:根據(jù)布局結(jié)構(gòu)依次創(chuàng)建5個(gè)區(qū)域,在每個(gè)區(qū)域上分別繪制一條線,生成5張折線圖5.4繪制自定義區(qū)域的子圖根據(jù)網(wǎng)格布局結(jié)構(gòu)創(chuàng)建區(qū)域使用subplot2grid()函數(shù)創(chuàng)建的子圖默認(rèn)已經(jīng)擁有了自定義的布局,例如,ax=plt.subplot2grid((2,2),(0,0))的功能等價(jià)于下面幾行代碼:importmatplotlib.gridspecasgsgrid_spec=gs.GridSpec(2,2)ax=plt.subplot(grid_spec[0,0])共享子圖的坐標(biāo)軸5.55.5共享子圖的坐標(biāo)軸在同一畫布中,每個(gè)子圖都有自己獨(dú)立的坐標(biāo)軸,如果兩個(gè)或多個(gè)子圖的坐標(biāo)軸上具有相同的刻度,則可以共享這些子圖的坐標(biāo)軸。通過共享坐標(biāo)軸,多個(gè)子圖可以在相同的刻度和比例下進(jìn)行縮放,使得數(shù)據(jù)的變化和趨勢(shì)更易于觀察和理解。5.5.1共享相鄰子圖的坐標(biāo)軸掌握共享子圖坐標(biāo)軸的方式,能夠共享相鄰子圖的坐標(biāo)軸學(xué)習(xí)目標(biāo)5.5.1共享相鄰子圖的坐標(biāo)軸共享坐標(biāo)軸的介紹共享相鄰子圖的坐標(biāo)軸是指相鄰的兩個(gè)子圖共享相同的坐標(biāo)軸,如果兩個(gè)子圖位于同一行或同一列,那么它們之間可以共享相同的x軸和y軸。5.5.1共享相鄰子圖的坐標(biāo)軸參數(shù)sharex或sharey的取值當(dāng)使用pyplot模塊的subplots()函數(shù)創(chuàng)建子圖的區(qū)域時(shí),可以通過參數(shù)sharex或sharey控制是否共享子圖之間的x軸或y軸。參數(shù)sharex或sharey總共支持以下幾種取值。True或'all':表示所有子圖之間共享x軸或y軸。False或'none':表示所有子圖之間不共享x軸或y軸。'row':表示每一行的子圖之間共享x軸或y軸。'col':表示每一列的子圖之間共享x軸或y軸。5.5.1共享相鄰子圖的坐標(biāo)軸參數(shù)sharex或sharey的取值5.5.1共享相鄰子圖的坐標(biāo)軸共享坐標(biāo)軸的示例fig,ax_arr=plt.subplots(2,2,

sharex='col')ax1=ax_arr[0,0]x1=np.linspace(0,2*np.pi,400)y1=np.cos(x1**2)ax1.plot(x1,y1)……示例:規(guī)劃2行2列的矩陣區(qū)域,依次在每個(gè)區(qū)域中繪制子圖,并共享每一列子圖的x軸5.5.2共享非相鄰子圖的坐標(biāo)軸掌握共享子圖坐標(biāo)軸的方式,能夠共享非相鄰子圖之間的坐標(biāo)軸學(xué)習(xí)目標(biāo)5.5.2共享非相鄰子圖的坐標(biāo)軸共享坐標(biāo)軸的介紹當(dāng)使用pyplot模塊的subplot()函數(shù)繪制單個(gè)子圖時(shí),也可以將代表其他子圖的變量傳遞給該函數(shù)的參數(shù)sharex或sharey參數(shù),此時(shí)可以共享非相鄰子圖之間的坐標(biāo)軸。5.5.2共享非相鄰子圖的坐標(biāo)軸共享坐標(biāo)軸的示例ax_one=plt.subplot(221)x1=np.linspace(0,2*np.pi,400)y1=np.cos(x1**2)ax_one.plot(x1,y1)x2=np.linspace(0.01,10,100)y2=np.sin(x2)ax_two=plt.subplot(224,

sharex=ax_one)ax_two.plot(x2,y2)示例:規(guī)劃2行2列的矩陣區(qū)域,分別在對(duì)角線位置上繪制兩個(gè)子圖,并共享它們的x軸5.5.3同一子圖共享坐標(biāo)軸掌握共享子圖坐標(biāo)軸的方式,能夠共享同一子圖的坐標(biāo)軸學(xué)習(xí)目標(biāo)5.5.3同一子圖共享坐標(biāo)軸共享坐標(biāo)軸的介紹同一子圖也可以共享坐標(biāo)軸,即一個(gè)子圖共享x軸但具有獨(dú)立y軸,常見于比較不同量級(jí)或具有不同單位的數(shù)據(jù)的情況。例如,在同一畫布中同時(shí)繪制柱形圖和折線圖,柱形圖參考左側(cè)的y軸,折線圖參考右側(cè)的y軸。5.5.3同一子圖共享坐標(biāo)軸twinx()的語(yǔ)法格式twinx(ax=None)參數(shù)ax表示要共享x軸的繪圖區(qū)域,它的值是一個(gè)Axes

類或其子類的對(duì)象,默認(rèn)值為None,即默認(rèn)在當(dāng)前的繪圖區(qū)域上創(chuàng)建新的對(duì)象。如果指定了參數(shù)

,會(huì)在指定的繪圖區(qū)域上創(chuàng)建共享x軸但有獨(dú)立y軸的新對(duì)象。twinx()函數(shù)返回一個(gè)新的

Axes類的對(duì)象,它與原始Axes對(duì)象共享x軸,但具有獨(dú)立的y軸。Matplotlib中提供了twinx()函數(shù),該函數(shù)用于創(chuàng)建一個(gè)共享x軸的新繪圖區(qū)域,新繪圖區(qū)域會(huì)覆蓋原來的繪圖區(qū)域,且顯示右側(cè)y軸的刻度。5.5.3同一子圖共享坐標(biāo)軸共享坐標(biāo)軸的示例fig,ax_old=plt.subplots()x=np.arange(0,6,0.5)y_sa=np.power(x,3)ax_old.scatter(x,y_sa)#創(chuàng)建共享x軸的新繪圖區(qū)域ax_new=ax_old.twinx()y_pl=np.sin(x)ax_new.plot(x,y_pl)示例:在繪圖區(qū)域上繪制一組數(shù)據(jù)點(diǎn),創(chuàng)建一個(gè)共享x軸的新繪圖區(qū)域,在新繪圖區(qū)域上繪制一條線5.5.4實(shí)例4:某地區(qū)全年氣溫與降水量、蒸發(fā)量的關(guān)系掌握實(shí)例4的目標(biāo)和思路,能夠編寫程序在同一畫布繪制線和柱形學(xué)習(xí)目標(biāo)5.5.4實(shí)例4:某地區(qū)全年氣溫與降水量、蒸發(fā)量的關(guān)系全年的氣溫、降水量和蒸發(fā)量全年的氣溫、降水量和蒸發(fā)量之間存在著緊密的關(guān)系。高氣溫促進(jìn)蒸發(fā)量增加,而濕熱空氣會(huì)形成降水,導(dǎo)致降水量增加。這種關(guān)系對(duì)于水循環(huán)、氣候變化和資源管理至關(guān)重要。了解全年氣溫與降水量、蒸發(fā)量之間的關(guān)系,有助于我們更好地預(yù)測(cè)和應(yīng)對(duì)氣候變化的影響。5.5.4實(shí)例4:某地區(qū)全年氣溫與降水量、蒸發(fā)量的關(guān)系氣溫、降水量與蒸發(fā)量的數(shù)據(jù)月份平均氣溫(℃)降水量(ml)蒸發(fā)量(ml)1月2.02.62.02月2.25.94.93月3.39.07.04月4.526.423.25月6.328.725.66月10.270.776.77月20.3175.6135.68月33.4182.2162.29月23.048.732.610月16.518.820.011月12.06.06.412月6.22.33.3某地區(qū)全年的平均氣溫與降水量、蒸發(fā)量下面根據(jù)表格的數(shù)據(jù)繪制一張圖表:包含兩組柱形和一條線。將月份一列的數(shù)據(jù)作為x軸的刻度標(biāo)簽。將平均氣溫一列的數(shù)據(jù)作為線條用到的數(shù)據(jù)。將降水量和蒸發(fā)量這兩列的數(shù)據(jù)作為兩組柱形的數(shù)據(jù),分別展示平均氣溫、降水量、蒸發(fā)量之間的關(guān)系。5.5.4實(shí)例4:某地區(qū)全年氣溫與降水量、蒸發(fā)量的關(guān)系實(shí)例4的需求子圖的布局技巧5.65.6子圖的布局技巧當(dāng)帶有標(biāo)題的多個(gè)子圖并排顯示時(shí),可能會(huì)因區(qū)域過于緊湊而出現(xiàn)標(biāo)題和坐標(biāo)軸重疊的問題,也可能子圖的標(biāo)題超出畫布的區(qū)域。Matplotlib中提供了一些調(diào)整子圖布局的技巧,主要包括約束布局和緊密布局,通過這些技巧可以合理布局多個(gè)子圖。5.6.1約束布局掌握約束布局的實(shí)現(xiàn)方式,能夠通過約束布局合理排列多個(gè)子圖的位置學(xué)習(xí)目標(biāo)5.6.1約束布局約束布局的介紹在Matplotlib中,約束布局是一種布局方式,用于自動(dòng)調(diào)整子圖元素的位置和尺寸,以避免它們之間的重疊,從而在不同大小的畫布上都能正確顯示。約束布局的實(shí)現(xiàn)原理比較簡(jiǎn)單,首先會(huì)預(yù)留一定的空間給每個(gè)子圖元素,保證它們不會(huì)超出繪圖區(qū)域的邊界,然后根據(jù)一系列約束條件計(jì)算各個(gè)子圖元素的最終位置和尺寸,最后自動(dòng)調(diào)整子圖的位置和尺寸,使它們滿足約束條件的同時(shí)盡可能減少重疊現(xiàn)象。5.6.1約束布局約束布局的啟用方式當(dāng)繪制多個(gè)子圖時(shí),Matplotlib默認(rèn)并未啟用約束布局,我們可以通過兩種方式啟用約束布局,第一種方式是使用subplots()或figure()函數(shù)的參數(shù)layout或constrained_layout;第二種方式是修改figure.constrained_layout.use配置項(xiàng)。通過subplots()或figure()的參數(shù)layout或constrained_layout啟用約束布局通過修改figure.constrained_layout.use配置項(xiàng)啟用約束布局方式一:方式二:5.6.1約束布局約束布局的啟用方式1.使用subplots()或figure()函數(shù)的參數(shù)layout或constrained_layoutplt.subplots(layout="constrained")當(dāng)調(diào)用subplots()函數(shù)創(chuàng)建多個(gè)子圖的繪圖區(qū)域,或者調(diào)用figure()函數(shù)創(chuàng)建畫布時(shí),可以通過參數(shù)layout指定布局方式,將該參數(shù)的值設(shè)置為constrained,從而啟用約束布局。也可以通過參數(shù)constrained_layout指定是否啟用約束布局,將該參數(shù)的值設(shè)置為True來明確啟用約束布局,5.6.1約束布局約束布局的啟用方式2.修改figure.constrained_layout.use配置項(xiàng)plt.rcParams['figure.constrained_layout.use']=True配置項(xiàng)figure.constrained_layout.use用于設(shè)置是否默認(rèn)啟用約束布局,它的默認(rèn)值為False,即不啟用約束布局。通過rcParams字典或rc()函數(shù)將配置項(xiàng)figure.constrained_layout.use的值修改為True,從而啟用約束布局。5.6.1約束布局約束布局的啟用方式2.修改figure.constrained_layout.use配置項(xiàng)另外,還可以結(jié)合以下兩個(gè)配置項(xiàng)來調(diào)整子圖之間的間距。figure.constrained_layout.w_pad/h_pad:用于設(shè)置約束布局時(shí)子圖的水平和垂直間距的填充值,默認(rèn)值為0.04167。figure.constrained_layout.wspace/hspace:用于設(shè)置約束布局時(shí)子圖的水平和垂直間距,默認(rèn)值為0.02。5.6.1約束布局啟用約束布局的示例fig,axs=plt.subplots(2,2,

constrained_layout=True)ax_one=axs[0,0]ax_one.set_title('Title')ax_two=axs[0,1]ax_two.set_title('Title')ax_thr=axs[1,0]ax_thr.set_title('Title')ax_fou=axs[1,1]ax_fou.set_title('Title')示例:創(chuàng)建多個(gè)帶有標(biāo)題的子圖,啟動(dòng)約束布局解決子圖之間刻度標(biāo)簽與標(biāo)題重疊的問題5.6.1約束布局約束布局的注意事項(xiàng)需要注意的是,約束布局只會(huì)考慮刻度標(biāo)簽、軸標(biāo)簽、標(biāo)題和圖例的位置,而不會(huì)考慮子圖其他元素的位置。因此,使用約束布局后的子圖之間可能還是會(huì)出現(xiàn)圖表元素被裁剪或重疊的問題。5.6.2緊密布局掌握緊密布局的實(shí)現(xiàn)方式,能夠通過緊密布局合理排列多個(gè)子圖的位置學(xué)習(xí)目標(biāo)5.6.2緊密布局緊密布局的介紹緊密布局是另一種布局方式,它會(huì)自動(dòng)調(diào)整子圖的位置和尺寸,以最大程度地減少子圖之間的重疊,并填充整個(gè)畫布。這有助于在整個(gè)圖表區(qū)域內(nèi)緊湊地排列子圖,在有限的空間中展示更多的圖表元素,一般適用于子圖數(shù)量較多的情況。注意,緊密布局只會(huì)調(diào)整刻度標(biāo)簽、軸標(biāo)簽和標(biāo)題,可能會(huì)導(dǎo)致一些元素的尺寸太小或過于緊密。5.6.2緊密布局緊密布局的啟用方式Matplotlib中提供了三種實(shí)現(xiàn)緊密布局的方式:第一種方式是調(diào)用tight_layout()函數(shù);第二種方式是使用subplots()或figure()函數(shù)的參數(shù)layout;第三種方式是修改figure.autolayout配置項(xiàng)。調(diào)用tight_layout()函數(shù)啟用緊密布局使用subplots()或figure()函數(shù)的參數(shù)layout啟用緊密布局方式一:方式二:修改figure.autolayout配置項(xiàng)啟用緊密布局方式三:5.6.2緊密布局緊密布局的啟用方式1.調(diào)用tight_layout()函數(shù)tight_layout()函數(shù)用于自動(dòng)調(diào)整子圖之間或周圍的間隙,使子圖能適應(yīng)畫布,以確保子圖元素的標(biāo)簽、標(biāo)題、刻度標(biāo)簽等不會(huì)重疊或被截?cái)?。tight_layout(*,

pad=1.08,

h_pad=None,

w_pad=None,

rect=None)pad:表示畫布邊緣與子圖邊緣的間距,默認(rèn)值為1.08。h_pad,w_pad:表示相鄰子圖垂直方向和水平方向的間距,默認(rèn)值為None,表示使用參數(shù)pad的值。rect:表示要排列的子圖范圍,該參數(shù)的值是一個(gè)四元組(left,bottom,right,top),元組中每個(gè)元素分別表示左、下、右和上邊界的位置,默認(rèn)值為(0,0,1,1)。注意,該參數(shù)的值是相對(duì)于圖表的歸一化坐標(biāo),因此范圍必須在0~1之間。5.6.2緊密布局緊密布局的啟用方式1.調(diào)用tight_layout()函數(shù)當(dāng)參數(shù)pad的值設(shè)為0時(shí),可能會(huì)導(dǎo)致某些子圖元素被裁剪或過于接近邊界,這種情況其實(shí)是因?yàn)樗惴ㄥe(cuò)誤或受到算法的限制。因此,官方建議參數(shù)pad的值應(yīng)大于0.3,以確保相鄰子圖之間足夠的間隔和避免元素被裁剪。5.6.2緊密布局緊密布局的啟用方式2.使用subplots()或figure()函數(shù)的參數(shù)layout當(dāng)調(diào)用subplots()函數(shù)創(chuàng)建多個(gè)子圖的繪圖區(qū)域,或者調(diào)用figure()函數(shù)創(chuàng)建畫布時(shí),可以在這些函數(shù)中將參數(shù)layout的值設(shè)置為tight,從而啟用緊密布局。plt.subplots(layout="tight")5.6.2緊密布局緊密布局的啟用方式3.修改figure.autolayout配置項(xiàng)配置項(xiàng)figure.autolayout用于設(shè)置是否啟用緊密布局,它的默認(rèn)值為False,即不啟用緊密布局。通過rcParams字典或rc()函數(shù)將配置項(xiàng)figure.autolayout的值修改為True,從而啟用緊密布局。plt.rcParams['figure.autolayout']=True5.6.2緊密布局啟用緊密布局的示例fig,axs=plt.subplots(2,2)ax_one=axs[0,0]ax_one.set_title('Title')ax_two=axs[0,1]ax_two.set_title('Title')ax_thr=axs[1,0]ax_thr.set_title('Title')ax_fou=axs[1,1]ax_fou.set_title('Title')plt.tight_layout(pad=0.4,

w_pad=0.5,h_pad=2)示例:創(chuàng)建多個(gè)帶有標(biāo)題的子圖,啟動(dòng)緊密布局解決子圖之間刻度標(biāo)簽與標(biāo)題重疊的問題5.6.3實(shí)例5:2023年上半年比亞迪汽車的銷售情況掌握實(shí)例5的目標(biāo)和思路,能夠編寫程序在同一畫布繪制兩張子圖,并啟用約束布局調(diào)整子圖中元素的位置學(xué)習(xí)目標(biāo)5.6.3實(shí)例5:2023年上半年比亞迪汽車的銷售情況比亞迪汽車的介紹比亞迪作為中國(guó)汽車制造業(yè)的領(lǐng)軍企業(yè),一直以來因其創(chuàng)新技術(shù)和環(huán)保理念而備受矚目。多年來,比亞迪堅(jiān)持自主研發(fā)和創(chuàng)新驅(qū)動(dòng),不斷推出具有競(jìng)爭(zhēng)力的電動(dòng)汽車和混合動(dòng)力車型。這一品牌的汽車以高品質(zhì)、高性能和綠色環(huán)保而聞名,在國(guó)內(nèi)和國(guó)際市場(chǎng)上獲得了廣泛的認(rèn)可和贊譽(yù)。5.6.3實(shí)例5:2023年上半年比亞迪汽車的銷售情況汽車的銷售數(shù)據(jù)月份銷量(輛)1月1513412月1936553月2070804月2102955月2402206月250346上半年比亞迪汽車的銷量5.6.3實(shí)例5:2023年上半年比亞迪汽車的銷售情況汽車的銷售數(shù)據(jù)月份同比增長(zhǎng)(%)1月58.62月112.63月97.44月98.65月109.46月88.2上半年比亞迪汽車銷量的同比增長(zhǎng)下面根據(jù)表格的數(shù)據(jù)繪制兩個(gè)子圖:第一個(gè)子圖位于畫布上方,寬度與畫布等寬,高度占據(jù)畫布的二分之一,子圖是一張柱形圖,用于展示上半年比亞迪汽車的銷量。第二個(gè)子圖位于畫布下方,它的寬度與畫布相等,高度占據(jù)畫布的二分之一,該子圖是一張折線圖,用于展示上半年比亞迪汽車銷量的同比增長(zhǎng)。5.6.3實(shí)例5:2023年上半年比亞迪汽車的銷售情況實(shí)例5的需求本章小結(jié)本章主要對(duì)子圖的相關(guān)內(nèi)容進(jìn)行了介紹,首先介紹了什么是子圖以及子圖的布局方式,然后介紹了子圖的繪制,包括繪制等分區(qū)域、跨越區(qū)域、自定義區(qū)域的子圖;接著介紹了子圖坐標(biāo)軸的共享;最后介紹了子圖的布局技巧,包括約束布局和緊密布局。通過學(xué)習(xí)本章的內(nèi)容,讀者能了解子圖的作用,并可以熟練地規(guī)劃子圖的布局。第6章坐標(biāo)軸的定制《Python數(shù)據(jù)可視化(第2版)

》學(xué)習(xí)目標(biāo)/Target

熟悉坐標(biāo)軸,能夠歸納從繪圖區(qū)域中獲取x軸、y軸和軸脊的方式

熟悉添加坐標(biāo)軸的方式,能夠通過axes()函數(shù)向畫布上添加繪圖區(qū)域,并自動(dòng)顯示坐標(biāo)軸

掌握定制刻度的方式,能夠定制刻度的位置、刻度標(biāo)簽格式、刻度的樣式

掌握隱藏軸脊的方式,能夠隱藏坐標(biāo)軸的全部軸脊或部分軸脊

掌握移動(dòng)軸脊的方式,能夠?qū)⑤S脊移動(dòng)到指定的位置章節(jié)概述/Summary前文中使用的坐標(biāo)軸有著固定的樣式,比如刻度線朝外,不用的軸始終顯示,日期時(shí)間格式的刻度標(biāo)簽都是用戶手動(dòng)編寫的,這限制了坐標(biāo)軸的靈活性。為了便于用戶靈活地操作坐標(biāo)軸,Matplotlib中提供了一些定制坐標(biāo)軸的功能,包括向任意位置添加坐標(biāo)軸、定制坐標(biāo)軸的刻度、隱藏坐標(biāo)軸的軸脊、移動(dòng)軸脊的位置,從而使圖表更具個(gè)性化和靈活性。本章將詳細(xì)介紹定制坐標(biāo)軸的內(nèi)容。目錄/Contents01坐標(biāo)軸概述02在任意位置添加坐標(biāo)軸03定制刻度04隱藏軸脊05移動(dòng)軸脊坐標(biāo)軸概述6.16.1坐標(biāo)軸概述熟悉坐標(biāo)軸,能夠歸納從繪圖區(qū)域中獲取x軸、y軸和軸脊的方式學(xué)習(xí)目標(biāo)6.1坐標(biāo)軸概述坐標(biāo)軸的介紹Matplotlib中繪圖區(qū)域默認(rèn)使用直角坐標(biāo)系,在直角坐標(biāo)系中,總共有兩條水平坐標(biāo)軸、兩條垂直坐標(biāo)軸,這些坐標(biāo)軸圍成的區(qū)域用于界定圖形顯示的范圍,其中左側(cè)和下方的坐標(biāo)軸(x軸和y軸)經(jīng)常被使用,上方和右側(cè)的坐標(biāo)軸很少被使用。6.1坐標(biāo)軸概述坐標(biāo)軸的介紹每個(gè)坐標(biāo)軸的基本結(jié)構(gòu)相同,主要包括標(biāo)簽、刻度和軸脊這些元素,其中標(biāo)簽用于說明坐標(biāo)軸的內(nèi)容;刻度用于表示特定數(shù)值或區(qū)間的小短線及其文本標(biāo)記,小短線被稱為刻度線,文本標(biāo)記被稱為刻度標(biāo)簽,刻度線又分為主刻度線和次刻度線,次刻度線默認(rèn)是隱藏的;軸脊是確定坐標(biāo)軸位置的基準(zhǔn)線,通常是一條直線。6.1坐標(biāo)軸概述坐標(biāo)軸相關(guān)的屬性坐標(biāo)軸的每個(gè)部分其實(shí)都對(duì)應(yīng)Matplotlib中的一個(gè)類,其中坐標(biāo)軸對(duì)應(yīng)Axis類,軸脊對(duì)應(yīng)Spine類,刻度對(duì)應(yīng)Ticker類,x軸對(duì)應(yīng)Xaxis類,y軸對(duì)應(yīng)Yaxis類。為了便于用戶對(duì)坐標(biāo)軸進(jìn)行精細(xì)化定制,Axes類提供了一些坐標(biāo)軸相關(guān)的屬性,用戶通過這些屬性可以便捷地獲取x軸、y軸、軸脊、刻度、標(biāo)簽等特定部分。6.1坐標(biāo)軸概述坐標(biāo)軸相關(guān)的屬性1.xaxis屬性xaxis屬性用于獲取繪圖區(qū)域的x軸,返回一個(gè)Xaxis類的對(duì)象。importmatplotlib.pyplotaspltfig=plt.figure()ax=fig.add_axes((0.1,0.1,0.8,0.8))ax.xaxis#獲取x軸<matplotlib.axis.XAxisat0x1ece3266190>6.1坐標(biāo)軸概述坐標(biāo)軸相關(guān)的屬性2.yaxis屬性yaxis屬性用于獲取繪圖區(qū)域的y軸,返回一個(gè)Yaxis類的對(duì)象。ax.yaxis#獲取y軸<matplotlib.axis.YAxisat0x1ece0802710>6.1坐標(biāo)軸概述坐標(biāo)軸相關(guān)的屬性3.spines屬性spines屬性用于獲取坐標(biāo)軸的全部軸脊,以便用戶進(jìn)一步定制軸脊的各種屬性。訪問spines屬性后會(huì)返回一個(gè)Spines類的對(duì)象。ax.spines#獲取全部軸脊<matplotlib.spines.Spinesat0x1ece31eefd0>6.1坐標(biāo)軸概述坐標(biāo)軸相關(guān)的屬性3.spines屬性Spines類表示圖表包含的全部軸脊,它可以像字典一樣通過指定軸脊的類型來獲取相應(yīng)的軸脊對(duì)象,也就是Spine類的對(duì)象。軸脊的類型總共有4個(gè),分別是'left'、'right'、'bottom'

'top',依次表示左軸脊、右軸脊、下軸脊和上軸脊。ax.spines['left']#獲取左軸脊<matplotlib.spines.Spineat0x1ece324b290>在任意位置添加坐標(biāo)軸6.26.2在任意位置添加坐標(biāo)軸熟悉添加坐標(biāo)軸的方式,能夠通過axes()函數(shù)向畫布的任意位置添加任意大小的繪圖區(qū)域,并自動(dòng)顯示坐標(biāo)軸學(xué)習(xí)目標(biāo)6.2在任意位置添加坐標(biāo)軸axes()函數(shù)的語(yǔ)法格式Matplotlib支持向畫布的任意位置添加自定義大小的繪圖區(qū)域,并自動(dòng)顯示坐標(biāo)軸,而不再受到規(guī)劃區(qū)域的限制。使用pyplot模塊中的axes()函數(shù)可以創(chuàng)建一個(gè)Axes類的對(duì)象,并將其作為繪圖區(qū)域添加到當(dāng)前的畫布中。axes(arg=None,

projection=None,polar=False,**kwargs)arg:用于指定繪圖區(qū)域的位置和大小,該參數(shù)的取值可以是以下任一類型。①None:默認(rèn)值,相當(dāng)于使用subplot()在畫布上添加繪圖區(qū)域,繪圖區(qū)域會(huì)占據(jù)整個(gè)畫布。②元組:包含4個(gè)元素的元組(left,bottom,width,height),其中l(wèi)eft和bottom用于指定繪圖區(qū)域左側(cè)和底部到畫布左側(cè)和底部的相對(duì)距離,從而確定繪圖區(qū)域的位置;width和height用于指定繪圖區(qū)域與畫布的相對(duì)寬度和高度,從而確定繪圖區(qū)域的大小,每個(gè)元素的取值范圍為0~1。6.2在任意位置添加坐標(biāo)軸axes()函數(shù)的語(yǔ)法格式Matplotlib支持向畫布的任意位置添加自定義大小的繪圖區(qū)域,同時(shí)自動(dòng)顯示坐標(biāo)軸,而不再受到規(guī)劃區(qū)域的限制。使用pyplot模塊中的axes()函數(shù)可以創(chuàng)建一個(gè)Axes類的對(duì)象,并將其作為當(dāng)前的繪圖區(qū)域添加到當(dāng)前的畫布中。axes(arg=None,

projection=None,polar=False,**kwargs)projection:用于指定繪圖區(qū)域的投影方式,該參數(shù)的取值可以是None、‘a(chǎn)itoff’、‘hammer’、‘lambert’、‘mollweide’、‘polar’或

‘rectilinear’中的任一取值,默認(rèn)值為None,即繪圖區(qū)域?qū)⑹褂媚J(rèn)的直角坐標(biāo)系投影,也就是說,繪圖區(qū)域?qū)⑹褂贸R?guī)的直角坐標(biāo)系,具有水平坐標(biāo)軸和垂直坐標(biāo)軸,用于繪制標(biāo)準(zhǔn)的二維圖形。polar:表示是否使用極坐標(biāo)系,默認(rèn)值為False,即不使用極坐標(biāo)系。若該參數(shù)的值設(shè)為True,則其作用等價(jià)于projection='polar'。6.2在任意位置添加坐標(biāo)軸添加繪圖區(qū)域并顯示坐標(biāo)軸%matplotlibautoimportmatplotlib.pyplotasplt#添加第1個(gè)繪圖區(qū)域plt.axes((0.2,0.5,0.3,0.3))#添加第2個(gè)繪圖區(qū)域plt.axes((0.6,0.4,0.2,0.2))plt.show(block=True)示例:在當(dāng)前畫布依次添加兩個(gè)繪圖區(qū)域,同時(shí)顯示坐標(biāo)軸6.2在任意位置添加坐標(biāo)軸添加繪圖區(qū)域并顯示坐標(biāo)軸除此之外,還可以使用Figure類對(duì)象的add_axes()方法在當(dāng)前畫布的任意位置添加繪圖區(qū)域,該方法與axes()函數(shù)的參數(shù)用法相同。定制刻度6.36.3定制刻度定制刻度是數(shù)據(jù)可視化中的一項(xiàng)技巧,它允許用戶自定義刻度的位置、格式和樣式,以提升圖表的可讀性和美觀度。通過定制刻度,可以精確控制刻度的位置,改變刻度標(biāo)簽的顯示方式,以及調(diào)整刻度標(biāo)簽的外觀,從而更好地呈現(xiàn)數(shù)據(jù)的特點(diǎn)和趨勢(shì)。6.3.1定制刻度的位置和格式掌握定制刻度的方式,能夠根據(jù)需求定制刻度的位置、刻度標(biāo)簽的格式學(xué)習(xí)目標(biāo)6.3.1定制刻度的位置和格式刻度定位器和刻度格式器在Matplotlib中,默認(rèn)會(huì)根據(jù)當(dāng)前坐標(biāo)軸的范圍和數(shù)據(jù)區(qū)間自動(dòng)計(jì)算刻度的位置和數(shù)量。然而,在實(shí)際應(yīng)用中,有時(shí)需要根據(jù)特定需求定制刻度的位置和格式。例如,將刻度與特定數(shù)據(jù)點(diǎn)對(duì)齊,或者將刻度標(biāo)簽格式化為日期時(shí)間形式。為了實(shí)現(xiàn)這些需求,Matplotlib提供了一系列刻度定位器和刻度格式器,可應(yīng)用于坐標(biāo)軸的主刻度和次刻度,從而實(shí)現(xiàn)刻度位置和格式的定制。6.3.1定制刻度的位置和格式刻度定位器1.刻度定位器刻度定位器用于確定坐標(biāo)軸上刻度的位置,它可以根據(jù)用戶的需求調(diào)整刻度的密度和間隔,以確保刻度位置合理且易于理解。matplotlib.ticker模塊中提供了刻度定位器的基類Locator,它派生了很多子類,方便用戶根據(jù)自己的需求選擇合適的刻度定位器。類說明AutoLocator自動(dòng)定位器,自動(dòng)計(jì)算刻度位置MaxNLocator最大值定位器,根據(jù)指定的最大數(shù)量計(jì)算刻度位置LinearLocator線性定位器,根據(jù)線性間隔的要求計(jì)算刻度的位置LogLocator對(duì)數(shù)定位器,根據(jù)對(duì)數(shù)間隔的要求計(jì)算刻度的位置MultipleLocator多點(diǎn)定位器,根據(jù)指定的基數(shù)(相鄰兩個(gè)刻度的間距)計(jì)算刻度的位置FixedLocator定點(diǎn)定位器,將指定坐標(biāo)列表直接設(shè)置為刻度位置,完全跳過自動(dòng)刻度計(jì)算過程IndexLocator索引定位器,根據(jù)指定的整數(shù)數(shù)量計(jì)算刻度的位置NullLocator空定位器,沒有任何刻度Locator的常見子類6.3.1定制刻度的位置和格式刻度定位器1.刻度定位器除此之外,matplotlib.dates模塊中還提供了很多與日期時(shí)間相關(guān)的定位器。類說明MicrosecondLocator微秒級(jí)定位器,以微秒為單位定位刻度SecondLocator秒級(jí)定位器,以秒為單位定位刻度MinuteLocator分鐘級(jí)定位器,以分鐘為單位定位刻度HourLocator小時(shí)級(jí)定位器,以小時(shí)為單位定位刻度DayLocator天級(jí)定位器,以每月的指定日期為單位定位刻度WeekdayLocator工作日級(jí)定位器,以工作日為單位定位刻度MonthLocator月份級(jí)定位器,以月為單位定位刻度YearLocator年份級(jí)定位器,以年為單位定位刻度常見的日期時(shí)間相關(guān)的定位器6.3.1定制刻度的位置和格式刻度定位器1.刻度定位器表格列舉了多個(gè)刻度定位器的類,用戶可以通過這些類的構(gòu)造方法創(chuàng)建對(duì)象,如此便生成一個(gè)刻度定位器。此外,Matplotlib中也支持自定義刻度定位器,用戶只需要定義一個(gè)繼承Locator的子類,并在該子類中重寫__call__()方法即可。6.3.1定制刻度的位置和格式刻度定位器1.刻度定位器下面以HourLocator為例介紹刻度定位器,HourLocator類表示小時(shí)級(jí)刻度定位器,它會(huì)以指定的小時(shí)為間隔顯示刻度。HourLocator(byhour=None,

interval=1,

tz=None)byhour:指定要顯示刻度的小時(shí),默認(rèn)值為range(24),即每個(gè)小時(shí)。interval:用于指定刻度之間的小時(shí)間隔,默認(rèn)值為1。tz:表示時(shí)區(qū),默認(rèn)值為None,即按照本地時(shí)區(qū)進(jìn)行刻度定位。6.3.1定制刻度的位置和格式刻度定位器1.刻度定位器通過HourLocator類的構(gòu)造方法創(chuàng)建間隔為兩小時(shí)的刻度定位器。hour_loc=HourLocator(interval=2)使用Matplotlib的set_major_locator()或set_minor_locator()方法可以將設(shè)置坐標(biāo)軸的主刻度或次刻度的定位器。ax.xaxis.set_major_locator(hour_loc)6.3.1定制刻度的位置和格式刻度格式器2.刻度格式器刻度格式器用于設(shè)置坐標(biāo)軸上刻度標(biāo)簽的格式。matplotlib.ticker模塊中提供了刻度格式器的基類Formatter,它派生了很多子類,方便用戶根據(jù)自己的需求選擇合適的刻度格式器。類說明NullFormatter空格式器,不顯示任何刻度標(biāo)簽IndexFormatter索引格式器,用于顯示離散化的序列刻度值FixedFormatter固定格式器,用于顯示固定列表中的刻度標(biāo)簽FuncFormatter函數(shù)格式器,用于執(zhí)行用戶定義的函數(shù)以格式化刻度標(biāo)簽StrMethodFormatter字符串方法格式器,使用內(nèi)置的Python字符串方法格式化刻度標(biāo)簽FormatStrFormatter格式字符串格式器,使用類似于格式化字符串等類型定義格式Formatter的常見子類6.3.1定制刻度的位置和格式刻度格式器2.刻度格式器刻度格式器用于設(shè)置坐標(biāo)軸上刻度標(biāo)簽的格式。matplotlib.ticker模塊中提供了刻度格式器的基類Formatter,它派生了很多子類,方便用戶根據(jù)自己的需求選擇合適的刻度格式器。類說明ScalarFormatter標(biāo)量格式器,用于顯示數(shù)值型刻度值,比如100000以科學(xué)計(jì)數(shù)法表示1E6LogFormatter對(duì)數(shù)格式器,基于對(duì)數(shù)刻度值顯示刻度標(biāo)簽LogFormatterExponent對(duì)數(shù)刻度指數(shù)格式器,以指數(shù)表示形式顯示刻度標(biāo)簽LogFormatterMathtext對(duì)數(shù)刻度數(shù)學(xué)符號(hào)格式器,使數(shù)學(xué)公式來顯示刻度標(biāo)簽LogFormatterSciNotation對(duì)數(shù)刻度科學(xué)符號(hào)格式器,使用科學(xué)符號(hào)來顯示刻度標(biāo)簽PercentFormatter百分比格式器,用于將刻度值轉(zhuǎn)換為百分比形式的刻度標(biāo)簽Formatter的常見子類6.3.1定制刻度的位置和格式刻度格式器2.刻度格式器matplotlib.dates模塊中還提供了很多與日期時(shí)間相關(guān)的格式器。類說明AutoDateFormatter日期自動(dòng)格式器,用于自動(dòng)識(shí)別并格式化軸上的日期刻度,默認(rèn)的格式為'%Y-%m-%d',即年-月-日ConciseDateFormatter簡(jiǎn)潔日期格式器,通常用于顯示連續(xù)時(shí)間范圍并使用日期偏移量格式化日期刻度DateFormatter日期格式器,用于手動(dòng)指定坐標(biāo)軸上的日期格式常見的日期時(shí)間相關(guān)的格式器表格列舉了多個(gè)刻度格式器的類,用戶可以通過這些類的構(gòu)造方法創(chuàng)建對(duì)象,如此便生成一個(gè)刻度格式器。此外,Matplotlib中也支持自定義刻度格式器,用戶只需要定義一個(gè)繼承Formatter的子類,并在該子類中重寫__call__()方法即可。6.3.1定制刻度的位置和格式刻度格式器2.刻度格式器DateFormatter(fmt,

tz=None,

*,

usetex=None)fmt:表示日期格式字符串,用于根據(jù)格式控制符定義日期的顯示格式。格式控制符與datetime或time模塊中的日期時(shí)間格式控制符的用法相同。tz:表示時(shí)區(qū),默認(rèn)值為None,即本地時(shí)區(qū)。usetex:用于啟用或禁用使用TeX渲染文本,生成精美的數(shù)學(xué)公式、符號(hào)和特殊字符。當(dāng)設(shè)置為True時(shí),日期格式字符串中的任何TeX代碼都將被解析和渲染。下面以DateFormatter為例介紹刻度格式器,

DateFormatter類構(gòu)造方法的語(yǔ)法格式如下。6.3.1定制刻度的位置和格式刻度格式器2.刻度格式器通過DateFormatter類的構(gòu)造方法創(chuàng)建日期格式為“年/月/日”的刻度格式器。date_fmt=DateFormatter('%Y/%m/%d')使用Matplotlib的set_major_formatter()或set_minor_formatter()方法設(shè)置坐標(biāo)軸的主刻度或次刻度的格式器。ax.xaxis.set_major_formatter(date_fmt)6.3.1定制刻度的位置和格式定制刻度位置的格式的示例dates=['202310240','2023102402','2023102404','2023102406','2023102408']x_date=[datetime.strptime(d,'%Y%m%d%H')fordindates]y_data=[1,2,3,4,5]ax=plt.axes((0.2,0.2,0.6,0.6))ax.plot(x_date,y_data)hour_loc=HourLocator(interval=2)ax.xaxis.set_major_locator(hour_loc)date_fmt=DateFormatter('%H:%M')ax.xaxis.set_major_formatter(date_fmt)示例:通過刻度定位器和刻度格式器定制x軸的刻度6.3.2定制刻度的樣式掌握定制刻度樣式的方式,能夠通過tick_params()函數(shù)定制刻度的樣式學(xué)習(xí)目標(biāo)6.3.2定制刻度的樣式tick_params()函數(shù)的語(yǔ)法格式tick_params(axis='both',

which='major',

direction='out',

length=None,……,

labelright=None,

labelrotation=None,

**kwargs)axis:用于指定要設(shè)置屬性的坐標(biāo)軸,取值可以為'x'(x軸)、'y'(y軸)或'both'(x軸和y軸),默認(rèn)值為'both',即同時(shí)應(yīng)用于x軸和y軸的刻度。which:表示刻度的類型,取值可以為'major'(主刻度)、'minor'(次刻度)或'both'(主刻度和次刻度),默認(rèn)值為'major',即設(shè)置主刻度線和主刻度標(biāo)簽的屬性。length:表示刻度線的長(zhǎng)度,默認(rèn)值為4磅。Matplotlib中的坐標(biāo)軸刻度是有固定樣式的,例如,刻度線的方向默認(rèn)朝外,顏色默認(rèn)為黑色等。為了滿足用戶自定義刻度樣式的需求,pyplot模塊提供了tick_params()函數(shù),可以用于設(shè)置圖表刻度線和刻度標(biāo)簽的各種屬性。6.3.2定制刻度的樣式tick_params()函數(shù)的語(yǔ)法格式tick_params(axis='both',

which='major',

direction='out',

length=None,……,

labelright=None,

labelrotation=None,

**kwargs)direction:表示刻度線的方向,取值可以為'in'(朝內(nèi))、'out'(朝外)或'inout'(內(nèi)外皆有),默認(rèn)值為'out',即刻度線的方向是朝外的。width:表示刻度線的寬度,默認(rèn)值為0.5磅。color:表示刻度線的顏色,默認(rèn)顏色為黑色。pad:表示刻度線與刻度標(biāo)簽之間的間隙,默認(rèn)值為4磅。Matplotlib中的坐標(biāo)軸刻度是有固定樣式的,例如,刻度線的方向默認(rèn)朝外,顏色默認(rèn)為黑色等。然而,為了滿足用戶自定義刻度樣式的需求,pyplot模塊提供了tick_params()函數(shù),可以用于設(shè)置圖表刻度線和刻度標(biāo)簽的各種屬性。6.3.2定制刻度的樣

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論