




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
Python數(shù)據(jù)可視化第2章Matplotlib圖表構(gòu)成教師:xxx2024.07第1節(jié)Matplotlib繪圖基礎(chǔ)第2章
Matplotlib圖表構(gòu)成第2節(jié)子圖劃分第3節(jié)Axes屬性設(shè)置第1節(jié)Matplotlib繪圖基礎(chǔ)Matplotlib是Python平臺使用最廣泛的繪圖庫。其結(jié)構(gòu)比較復(fù)雜,包含眾多的繪圖對象和函數(shù)。為方便調(diào)用,matplotlib.pyplot模塊提供了一組命令式繪圖接口函數(shù),繪圖時主要使用此模塊。importmatplotlib.pyplotasplt。下面先看兩例:一、繪圖框架importnumpyasnpimportmatplotlib.pyplotasplt #導(dǎo)入繪圖庫plt.rcParams['font.family']='SimHei' #設(shè)黑體字體以顯示中文plt.rcParams['axes.unicode_minus']=False #正常顯示負(fù)號x=np.linspace(-2*np.pi,2*np.pi,100) #在[-2π,2π]間生成數(shù)列plt.plot(x,np.sin(x),label='sin(x)') #繪制正弦曲線plt.plot(x,np.cos(x),label='cos(x)') #繪制余弦曲線plt.legend(fontsize=14) #顯示圖例plt.title('正弦-余弦曲線',fontsize=18) #圖形標(biāo)題plt.savefig('pic1.png',transparent=True) #保存為背景透明的圖片第1節(jié)Matplotlib繪圖基礎(chǔ)(三)繪制散點圖一、繪圖框架importnumpyasnpimportmatplotlib.pyplotasplt plt.rcParams['font.family']='SimHei' x=np.arange(1,21) #x作為自變量y=2*x+1+np.random.uniform(-2,2,20) #"y=2x+1+隨機數(shù)"模擬產(chǎn)生因變量yax=plt.gca() #返回當(dāng)前繪圖區(qū)域?qū)ο?類型為Axes)ax.scatter(x,y,label='scatterfigure') #在ax上繪制散點圖ax.set_title('散點圖',fontsize=18) #圖標(biāo)題ax.set_xticks(range(0,25,5)) #設(shè)置x軸顯示的刻度值ax.set_xlabel('X軸',fontsize=14) #X軸標(biāo)簽ax.set_ylabel('Y軸',fontsize=14) #Y軸標(biāo)簽第1節(jié)Matplotlib繪圖基礎(chǔ)上面兩段代碼采用了兩種編碼風(fēng)格。一種是類似MATLAB風(fēng)格的“plt.函數(shù)()”的方式,這種方式簡單,初學(xué)者上手快。另一種是采用“ax.set_函數(shù)()”的面向?qū)ο蠓绞骄幋a,這種設(shè)置更靈活。一、繪圖框架(四)架構(gòu)層次Matplotlib庫采用面向?qū)ο蠓绞郊軜?gòu),主要分為三個層次:1.matplotlib.backend_bases.FigureCanvasBase:繪圖畫板,用于承載畫布。2.matplotlib.backend_bases.RendererBase:代表渲染器,用于在畫板上繪圖。3.matplotlib.artist.Artist:代表各類圖表組件,這些組件利用渲染器繪圖。Artist即對應(yīng)折線、柱體等圖形對象。一般繪圖只需生成Artist,1和2無需自行生成,均默認(rèn)存在。圖形繪制在一個Figure(畫布)上,F(xiàn)igure上至少有一個Axes(子圖)對象,可根據(jù)需要劃分多個Axes。在Axes中可添加簡單類型的Artist(例如折線/散點/柱形等)。第1節(jié)Matplotlib繪圖基礎(chǔ)繪圖前先準(zhǔn)備好數(shù)據(jù),數(shù)據(jù)多采用列表、numpy數(shù)組或pandas的DataFrame和Series等格式。繪圖基本流程如右圖所示。二、繪圖流程importnumpyasnpimportmatplotlib.pyplotasplt#導(dǎo)入繪圖庫x=np.linspace(-2*np.pi,2*np.pi,100)#準(zhǔn)備數(shù)據(jù)plt.plot(x,np.sin(x),label='sin(x)')
#繪正弦曲線plt.title('sin(x)',fontsize=18)
#標(biāo)題plt.legend(fontsize=14) #圖例plt.xlabel('x')
#x軸標(biāo)簽plt.grid() #網(wǎng)格線plt.show()
#顯示圖形第1節(jié)Matplotlib繪圖基礎(chǔ)在構(gòu)成圖表的各種Artist對象中,F(xiàn)igure(畫布)位于最頂層。它容納了圖形的所有元素,是后續(xù)所有繪圖對象的總?cè)萜鳌.嫴紝ο竽J(rèn)已存在,無需自己創(chuàng)建,有需要時也可自建。該對象常用屬性有:三、Figure對象Figure.patch:畫布的背景矩形。Figure.axes:畫布上的所有Axes子圖構(gòu)成的列表。Figure.images:畫布上的所有img圖片構(gòu)成的列表。Figure.texts:畫布上的所有文字實例構(gòu)成的列表。創(chuàng)建新畫布使用函數(shù)plt.figure(),格式如下。(8,6)表示畫布寬8英寸,高6英寸fig=plt.figure(figsize=(8,6),facecolor=None,edgecolor=None,frameon=True,**kwargs)fig=plt.gcf()#亦可用此命令獲取當(dāng)前默認(rèn)畫布對象,gcf:getcurrentfigure第1節(jié)Matplotlib繪圖基礎(chǔ)Axes是Figure上的繪圖區(qū)域,此術(shù)語也稱為子圖或坐標(biāo)系。axes對象默認(rèn)存在,也可自行創(chuàng)建。Axes是繪圖的核心對象,內(nèi)部可包含眾多圖形組件。Axes實例提供了繪圖的坐標(biāo)系,還包含坐標(biāo)軸對象(xaixs/yaixs軸)。四、Axes子圖屬性描述屬性描述artistsArtist對象linesLine2D對象列表patch作為Axes背景的Patch對象,可以是Rectangle或CirclepatchesPatch對象列表collectionsCollection對象textsText文字對象列表imagesAxesImage對象xaxisXAxis,即x軸legendLegend圖例對象yaxisYAxis,即y軸Axes對象的屬性第1節(jié)Matplotlib繪圖基礎(chǔ)Axes對象包含很多繪圖函數(shù)。例如,ax.plot()繪制折線圖,ax.bar()繪制條形圖。四、Axes子圖Axes對象的繪圖方法Axes方法創(chuàng)建對象存儲于列表Axes方法創(chuàng)建對象存儲于列表annotateAnnotatetextsimshowAxesImageimagesbarRectanglepatchestextTexttextserrorbarLine2D、Rectanglelines,patchesplotLine2DlinesfillPolygonpatchesscatterPolygonCollectioncollectionshistRectanglepatches
第1節(jié)Matplotlib繪圖基礎(chǔ)四、Axes子圖fig=plt.figure()
#新畫布#用add_subplot創(chuàng)建axes對象,1行2列的第1個子圖ax=fig.add_subplot(121)ax.patch.set_facecolor('b')
#設(shè)置子圖背景為藍(lán)色#設(shè)置背景的透明度,范圍0-1,1表示不透明ax.patch.set_alpha(0.1)#繪制一條線,線是Line2D對象ax.plot([0,1,2],[1,2,3],c='r',marker='x')ax.plot([-1,0,1],[-1,0,1],c='b',marker='d')#再繪一條線#列表lst中含有2個Line2D對象,可供后續(xù)修改時引用lst=ax.lines第1節(jié)Matplotlib繪圖基礎(chǔ)pyplot不支持中文,中文會錯誤顯示為小方框,需用plt.rcParams["font.family"]參數(shù)設(shè)置中文字體。設(shè)置中文字體后將導(dǎo)致坐標(biāo)刻度的負(fù)號無法顯示,因此還需設(shè)置axes.unicode_minus參數(shù),代碼如下:五、設(shè)置pyplot的參數(shù)importmatplotlib.pyplotaspltplt.rcParams['font.family']='SimHei' #設(shè)置黑體字體以正確顯示中文plt.rcParams['axes.unicode_minus']=False #確保負(fù)號顯示正常plt.xlim((-5,5)) #設(shè)置x軸刻度范圍plt.title('中文標(biāo)題') #執(zhí)行上面的plt.rcParams語句后,中文和負(fù)號應(yīng)顯示正常plt.rcParams['font.sans-serif']='SimHei' #設(shè)置黑體,此寫法亦可plt.rcParams['font.family']='ArialUnicodeMS' #Mac系統(tǒng)沒有Simhei,Mac應(yīng)設(shè)置此中文字體第1節(jié)Matplotlib繪圖基礎(chǔ)rcParams表示“runconfiguration”運行配置參數(shù)的意思。繪圖對象有默認(rèn)的屬性,這些屬性都可用plt.rcParams語句修改,示例如下。五、設(shè)置pyplot的參數(shù)x=np.linspace(1,10,100)plt.rcParams['lines.linestyle']=':' #修改線條為":"樣式
plt.rcParams['lines.linewidth']=5 #修改線條寬度plt.rcParams['font.size']=14 #設(shè)置字體的默認(rèn)大小#sin曲線將采用上面設(shè)置的默認(rèn)線形和寬度plt.plot(x,np.sin(x))#cos曲線用自設(shè)的'-.'樣式,寬度2plt.plot(x,np.cos(x),ls='-.',lw=2)plt.legend(['sin','cos']) #設(shè)圖例#修改上述默認(rèn)設(shè)置后,可用下面的命令恢復(fù)默認(rèn)設(shè)置
plt.rcdefaults()第2節(jié)子圖劃分一、等分子圖區(qū)域有時因為業(yè)務(wù)要求,需要將畫布劃分為若干子區(qū)域,每個子圖上繪制不同的圖形。plt有多種子圖劃分函數(shù)。plt.subplot()用于生成規(guī)整的行列布局的子圖,格式為:plt.subplot(numRows,numCols,plotNum)numRows表示將畫布分成幾行,numCols表示將畫布分成幾列,plotNum代表子圖編號(從1開始)。該命令執(zhí)行后返回axes子圖對象,此對象將成為默認(rèn)繪圖子圖,后續(xù)的圖形對象就自動繪制在此子圖上。plt.subplot(2,2,1) #2行2列的第一個子圖plt.subplot(221) #允許省略逗號,將參數(shù)寫為221,效果同上第2節(jié)子圖劃分一、等分子圖區(qū)域(一)plt.subplot()示例importmatplotlib.pyplotasplt#1行2列模式的第1個子圖,此為默認(rèn)子圖plt.subplot(1,2,1)#在坐標(biāo)(0.4,0.5)處顯示紅色字符串'121'plt.text(0.4,0.5,'121',c='red',fontsize=20)
plt.subplot(122) #1行2列模式的第2個子圖plt.text(0.4,0.5,'122',c='r',fontsize=20)第2節(jié)子圖劃分一、等分子圖區(qū)域(二)plt.subplots()示例執(zhí)行此命令將返回一個畫布對象fig及由多個axes構(gòu)成的數(shù)組。importmatplotlib.pyplotasplt#返回一個畫布對象fig,ax是二維數(shù)組,2行2列共4個子圖fig,ax=plt.subplots(nrows=2,ncols=2,figsize=(8,6))fig.patch.set_color('b') #畫布背景藍(lán)色fig.patch.set_alpha(0.1) #畫布背景透明度0.1x=np.arange(1,11)ax[0,0].plot(x,x) #y=x ax[0,1].plot(x,-x) #y=-xax[1,0].plot(x,x**2) #y=x2
ax[1,1].plot(x,np.log(x)) #y=lnx#ravel()將二維轉(zhuǎn)為一維以便遍歷fori,axesinenumerate(ax.ravel()): axes.set_title('ax'+str(i+1),fontsize='20')#設(shè)置子圖titlefig.tight_layout() #調(diào)整子圖間距,避免重疊第2節(jié)子圖劃分一、等分子圖區(qū)域(三)fig.add_subplot()示例對比上兩條命令,fig.add_subplot()命令的主體是畫布對象fig。fig=plt.figure() #創(chuàng)建新畫布ax1=fig.add_subplot(221) #2行2列的第1個子圖ax1.text(0.4,0.5,'ax1',c='r',fontsize=18)ax3=fig.add_subplot(223) #2行2列的第3個子圖ax3.text(0.4,0.5,'ax3',c='r',fontsize=18)ax2=fig.add_subplot(122) #1行2列的第2個子圖ax2.text(0.4,0.5,'ax2',c='r',fontsize=18) 第2節(jié)子圖劃分二、劃分復(fù)雜子圖如果遇到復(fù)雜的子圖劃分情況可考慮使用函數(shù)plt.subplot2grid()。該函數(shù)內(nèi)含的rowspan和colspan參數(shù)可以讓子圖跨越網(wǎng)格的多行或多列,實現(xiàn)靈活的區(qū)域劃分。函數(shù)的工作方式是設(shè)定網(wǎng)格,選中網(wǎng)格,確定選中行列的數(shù)量。示例見第2章配套代碼文件"02.ipynb"。第2節(jié)子圖劃分三、圖中圖前面的命令劃分的是規(guī)整子圖。fig.add_axes()命令可在畫布的任意位置創(chuàng)建新子圖,即使與現(xiàn)有的Axes對象重疊亦可,這樣可實現(xiàn)圖中圖的特殊效果。x=[1,2,3,4,5,6,7]y=[1,7,15,24,30,50,55]plt.plot(x,y,'gD-')#g綠色,D菱形點,-實線plt.title('大圖',fontsize=20)fig=plt.gcf()#返回當(dāng)前畫布#(left,bottom)新子圖左下角坐標(biāo),width:寬度,height:高度#此處將畫布寬和高均視為1left,bottom,width,height=0.2,0.5,0.25,0.25#在指定位置創(chuàng)建Axesax=fig.add_axes([left,bottom,width,height])ax.plot(x,y,'r^')#r^紅色三角點ax.set_title('圖中圖',fontsize=16)第3節(jié)Axes屬性設(shè)置Axes實例有x軸和y軸屬性,可以使用Axes.xaxis和Axes.yaxis來控制兩個軸的相關(guān)元素,例如刻度(tick)、刻度標(biāo)簽(ticklabel)、刻度線定位器等。此外,Axes還包含網(wǎng)格線(grid)、參考區(qū)域、標(biāo)題(title)、注釋(text)、圖例(legend)等圖形細(xì)節(jié)元素,如右圖所示。第3節(jié)Axes屬性設(shè)置一、軸屬性Axes的周邊有四條軸脊(top、bottom、left和right),默認(rèn)底部的軸脊為x軸,左邊的軸脊為y軸,x軸和y軸上有刻度線和刻度標(biāo)簽。函數(shù)set_color()、set_linewidth()和set_linestyle()用于設(shè)置軸脊的顏色、寬度和樣式。#以右軸脊為例,設(shè)置其顏色為黃色,寬度為10,樣式為虛線importmatplotlib.pyplotaspltax=plt.gcf().gca()
#返回當(dāng)前畫布的當(dāng)前子圖ax.spines['right'].set_color('y')
#設(shè)置右軸脊黃色ax.spines['right'].set_linewidth(10)
#線寬ax.spines['right'].set_linestyle('--')
#線條樣式第3節(jié)Axes屬性設(shè)置二、網(wǎng)格線、參考線和參考區(qū)域為了更好地觀察圖形和坐標(biāo)軸的對應(yīng)關(guān)系,通常會在繪圖區(qū)域添加一些參考元素。例如,背景網(wǎng)格線、水平參考線、豎直參考線、水平參考區(qū)域、豎直參考區(qū)域等。為避免背景喧賓奪主,可借助參數(shù)alpha調(diào)節(jié)背景透明度。alpha取值在0~1之間,值越小越透明。#設(shè)置網(wǎng)格線形態(tài)為"-.",紅色,透明度0.5plt.grid(linestyle="-.",c='r',alpha=0.5)第3節(jié)Axes屬性設(shè)置三、圖例圖例用于標(biāo)識區(qū)分畫布上的不同繪圖組件。繪圖時可以先設(shè)置各組件的label,然后執(zhí)行“plt.legend(loc=0)”顯示出圖例?!發(fā)oc=0”表示系統(tǒng)將自動選擇最合適的位置顯示圖例,盡量不遮蓋圖形,此為默認(rèn)參數(shù)。用戶也可自行指定圖例的位置,例如loc=1表示右上角,loc=2表示左上角,loc=3表示左下角等。loc的取值還可以用字符串“upperright、upperleft、lowerleft”等替代,詳情請查詢幫助help(plt.legend)。x=np.arange(10)y1,y2,y3,y4=x,x*2,x*3,x*4plt.plot(x,y1,x,y2,'-.',x,y3,':',x,y4,'--')#在legend中為4條線設(shè)置label,(1.05,1)圖例在Axes區(qū)域以外plt.legend(['$y1=x$','$y2=2*x$','$y3=3*x$','$y4=4*x$'],bbox_to_anchor=(1.05,1));第3節(jié)Axes屬性設(shè)置四、標(biāo)題為圖表添加標(biāo)題可以說明繪圖區(qū)域的核心信息。plt.title()函數(shù)用于設(shè)置圖像標(biāo)題,可以指定標(biāo)題的名稱、位置、顏色、字體、大小等。plt.title('標(biāo)題',fontsize=18,loc='center'),主要參數(shù)說明如下:loc:標(biāo)題位置,取值可為“l(fā)eft/right/center”,默認(rèn)居中。fontsize:字體大小,默認(rèn)12。va:垂直對齊,可選參數(shù)“center/top/bottom/baseline”。ha:水平對齊,可選參數(shù)“l(fā)eft/right/center”。rotation:旋轉(zhuǎn)角度,可選參數(shù)“vertical/horizontal”。backgroundcolor:背景顏色。bbox:標(biāo)題外框,用字典格式定義方框外形。plt.title('中間標(biāo)題',fontsize=16)plt.title('左邊標(biāo)題',loc='left',fontdict={'fontsize':'18','color':'r','family':'KaiTi'})plt.title('右邊標(biāo)題',loc='right',family='FangSong',fontsize=20,bbox=dict(facecolor='y',edgecolor='blue',alpha=0.3))#標(biāo)題外框第3節(jié)Axes屬性設(shè)置五、文本格式和注釋繪圖時可在圖形中添加適當(dāng)文本注釋,這樣圖形釋義更清晰。普通的不帶箭頭的注釋可使用函數(shù)plt.text()或plt.figtext()添加,帶箭頭的注釋使用函數(shù)plt.annotate()添加。plt.text()在當(dāng)前Axes中添加注釋文本,坐標(biāo)是相對Axes而言。plt.figtext()在當(dāng)前畫布上添加文字,坐標(biāo)是相對畫布而言。plt.axis([0,3,0,2])plt.figtext(0.15,0.9,'figtext()在畫布中注釋,坐標(biāo)相對當(dāng)前畫布',c='k',fontsize=16)plt.text(0.1,0.9,'text()在Axes中注釋,坐標(biāo)相對當(dāng)前Axes',c='b',fontsize=16)plt.text(0.2,1.6,'帶框注釋',fontsize=20,bbox=dict(fc='y',alpha=0.3))plt.text(2.1,1.5,'旋轉(zhuǎn)角度',fontsize=18,rotation=30)plt.text(0.3,0.4,'水印效果',fontsize=40,alpha=0.1)#透明度很高,水印效果plt.text(2.2,0.35,'上面',fontsize=40,c='r',zorder=2)#重疊時,zorder值大的顯示在外
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 天津仁愛學(xué)院《計算機系統(tǒng)的局限性》2023-2024學(xué)年第二學(xué)期期末試卷
- 排球正面上手發(fā)球 教學(xué)設(shè)計-2023-2024學(xué)年高一上學(xué)期體育與健康人教版必修第一冊
- 阜陽職業(yè)技術(shù)學(xué)院《石油工程軟件》2023-2024學(xué)年第二學(xué)期期末試卷
- 億以內(nèi)數(shù)的大小比較(教學(xué)設(shè)計)-2024-2025學(xué)年四年級上冊數(shù)學(xué)人教版
- 西安電力高等??茖W(xué)?!娥B(yǎng)羊?qū)W》2023-2024學(xué)年第二學(xué)期期末試卷
- 寧夏財經(jīng)職業(yè)技術(shù)學(xué)院《文化史》2023-2024學(xué)年第二學(xué)期期末試卷
- 泰州2024年江蘇泰興市婦幼保健院招聘高層次人才2人(第2批)筆試歷年參考題庫附帶答案詳解
- 漯河醫(yī)學(xué)高等??茖W(xué)校《鋼結(jié)構(gòu)設(shè)計與施工》2023-2024學(xué)年第二學(xué)期期末試卷
- 鶴壁職業(yè)技術(shù)學(xué)院《建筑實訓(xùn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 伊犁師范大學(xué)《融媒體監(jiān)測技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2024年3月30日事業(yè)單位聯(lián)考D類《職業(yè)能力傾向測驗》試題
- 通信施工安全培訓(xùn)
- 智慧生活:AI與智能家居-揭秘未來智能化生活趨勢
- 大單元教學(xué)設(shè)計基本步驟
- 消渴癥護理查房
- 《鋼鐵是怎樣煉成的》讀書分享課件
- 二手中型、重型載貨車鑒定評估技術(shù)規(guī)范
- DB11T 2120-2023 古建筑安全防范技術(shù)規(guī)范
- 工業(yè)自動化控制系統(tǒng)設(shè)計與實施規(guī)范
- 2023年銀行安全保衛(wèi)考試真題模擬匯編(共392題)
- DB34T 4627-2023 人民防空工程防護質(zhì)量檢測技術(shù)規(guī)程
評論
0/150
提交評論