版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
模塊5Matplotlib實(shí)現(xiàn)數(shù)據(jù)可視化模塊5Matplotlib實(shí)現(xiàn)數(shù)據(jù)可視化模塊5Matplotlib實(shí)現(xiàn)數(shù)據(jù)可視化
Matplotlib首次發(fā)表于2007年,由于在函數(shù)設(shè)計(jì)上參考了MATLAB,其名字以“Mat”開頭,中間的“plot”表示繪圖這一作用,而結(jié)尾的“l(fā)ib”則表示它是一個(gè)集合。近年來,Matplotlib在開源社區(qū)的推動(dòng)下,在科學(xué)計(jì)算領(lǐng)域得到了廣泛的應(yīng)用,成為了Python中應(yīng)用非常廣的繪圖工具包之一。Matplotlib中應(yīng)用最廣的是matplotlib.pyplot模塊。本模塊將講述基礎(chǔ)統(tǒng)計(jì)圖形的繪制方法。
模塊5Matplotlib實(shí)現(xiàn)數(shù)據(jù)可視化Ma目錄CONTENT010203Matplotlib基礎(chǔ)案例:人口數(shù)據(jù)分析Matplotlib數(shù)據(jù)可視化目錄CONTENT010203Matplotlib基礎(chǔ)案例:Matplotliblib基礎(chǔ)5.1Matplotliblib基礎(chǔ)5.1
Matplotlib庫是專門用于開發(fā)圖表(包括3D圖表)的,近年來被廣泛應(yīng)用于科技領(lǐng)域。Matplotlib的主要任務(wù)之一就是提供一套表示和操作圖形對(duì)象以及它的內(nèi)部對(duì)象的函數(shù)和工具。pyplot是Matplotlib的內(nèi)部模塊,該模塊提供操作Matplotlib庫的經(jīng)典Python編程接口,有著自己的命名空間,需要單獨(dú)導(dǎo)入NumPy庫。matplotlib.pyplot(以下簡(jiǎn)稱pyplot)是一個(gè)命令風(fēng)格函數(shù)的集合,使Matplotlib的機(jī)制更像MATLAB。每個(gè)繪圖函數(shù)都可對(duì)圖形進(jìn)行一些更改,如創(chuàng)建圖形,在圖形中創(chuàng)建繪圖區(qū)域,在繪圖區(qū)域繪制一些線條,使用標(biāo)簽裝飾繪圖等。在pyplot中,各種狀態(tài)跨函數(shù)調(diào)用保存,以便跟蹤諸如當(dāng)前圖形和繪圖區(qū)域之類的東西,并且繪圖函數(shù)始終指向當(dāng)前軸域。。5.1Matplotlib基礎(chǔ)5.1.1pyplot基礎(chǔ)語法Matplotlib庫是專門用于開發(fā)圖表(包括5.1Matplotlib基礎(chǔ)5.1.1pyplot基礎(chǔ)語法pyplot基本繪圖流程主要分為3個(gè)部分,如圖5-1所示。圖5-1pyplot基本繪圖流程5.1Matplotlib基礎(chǔ)5.1.1pyplot基礎(chǔ)語法5.1Matplotlib基礎(chǔ)5.1.1pyplot基礎(chǔ)語法1.創(chuàng)建畫布與創(chuàng)建子圖第一部分的主要作用是構(gòu)建出一張空白的畫布,并可以選擇是否將整個(gè)畫布劃分為多個(gè)部分,方便在同一幅圖上繪制多個(gè)圖形。當(dāng)只需要繪制一幅簡(jiǎn)單的圖形時(shí),這部分可以省略。pyplot中創(chuàng)建畫布及創(chuàng)建并選中子圖的常用函數(shù)如表5-1所示。5.1Matplotlib基礎(chǔ)5.1.1pyplot基礎(chǔ)語法5.1Matplotlib基礎(chǔ)5.1.1pyplot基礎(chǔ)語法2.添加畫布內(nèi)容第二部分是繪圖的主題部分。其中的添加標(biāo)題、添加坐標(biāo)軸名稱、繪制圖形等步驟是并列的,沒有先后順序,可以先繪制圖形,也可以先添加各類標(biāo)簽。但是添加圖例一定要在繪制圖形之后。pyplot中添加各類標(biāo)簽和圖例的常用函數(shù)如表5-2所示。5.1Matplotlib基礎(chǔ)5.1.1pyplot基礎(chǔ)語法5.1Matplotlib基礎(chǔ)5.1.1pyplot基礎(chǔ)語法3.保存與顯示圖形第三部分主要用于保存與顯示圖形,這部分內(nèi)容的常用函數(shù)只有兩個(gè),且參數(shù)很少,如表5-3所示。5.1Matplotlib基礎(chǔ)5.1.1pyplot基礎(chǔ)語法5.1Matplotlib基礎(chǔ)5.1.1pyplot基礎(chǔ)語法最簡(jiǎn)單的繪圖可以省略第一部分,而后直接在默認(rèn)的畫布上進(jìn)行圖形繪制,如下例所示。首先要導(dǎo)入pyplot模塊,并將其命名為plt。In[1]:importmatplotlib.pyplotasplt導(dǎo)入這個(gè)模塊時(shí),plt對(duì)象及其圖像處理功能已被實(shí)例化且可以使用。因此,把數(shù)據(jù)傳給plt函數(shù),然后直接使用即可。In[2]:plt.plot([1,2,3,4])Out[2]:[<matplotlib.lines.Line2Dat0x831a080>]結(jié)果顯示生成了一個(gè)Line2D對(duì)象。該對(duì)象為一條直線,數(shù)據(jù)點(diǎn)用藍(lán)線串在一起,它表示圖表中各數(shù)據(jù)點(diǎn)的線性延伸趨勢(shì),如圖5-2所示。5.1Matplotlib基礎(chǔ)5.1.1pyplot基礎(chǔ)語法5.1Matplotlib基礎(chǔ)5.1.1pyplot基礎(chǔ)語法圖5-2簡(jiǎn)單繪圖示例如果只是將一個(gè)數(shù)字列表或數(shù)組傳給plt.plot函數(shù),Matplotlib就會(huì)假定所傳入的是圖表的y值,于是將其與一個(gè)序列的x值對(duì)應(yīng)起來,x的取值依次為0、1、2、3…。5.1Matplotlib基礎(chǔ)5.1.1pyplot基礎(chǔ)語法5.1Matplotlib基礎(chǔ)5.1.1pyplot基礎(chǔ)語法通常,圖形表示的是一對(duì)對(duì)的(x,y)。因此,如果要正確定義圖表,就必須定義兩個(gè)數(shù)組,其中第一個(gè)數(shù)組為x軸的各個(gè)值,第二個(gè)數(shù)組為y軸的值。一個(gè)簡(jiǎn)單的不含子圖繪制的標(biāo)準(zhǔn)繪圖流程如下例所示,圖形如圖5-3所示。In[3]:importmatplotlib.pyplotaspltimportnumpyasnpx=np.arange(0,np.pi*2,0.01)y1=np.sin(x)y2=np.cos(x)plt.title(‘sin(x)&cos(x)‘)#添加標(biāo)題plt.xlabel(‘x‘)#添加x軸名稱plt.ylabel(‘y‘)#添加y軸名稱plt.xlim((0,np.pi*2))#規(guī)定x軸范圍5.1Matplotlib基礎(chǔ)5.1.1pyplot基礎(chǔ)語法5.1Matplotlib基礎(chǔ)plt.ylim((-1,1))#規(guī)定y軸范圍plt.xticks([0,1,2,3,4,5,6])#規(guī)定x軸刻度plt.yticks([-1,-1/2,0,1/2,1])#規(guī)定y軸刻度plt.plot(x,y1,x,y2)plt.legend([‘$sin(x)$‘,‘$cos(x)$‘])plt.savefig(‘f:/sin.png‘)5.1.1pyplot基礎(chǔ)語法5.1Matplotlib基礎(chǔ)plt.ylim((-1,1)5.1Matplotlib基礎(chǔ)此外,plot函數(shù)還可以接收第三個(gè)參數(shù),用于描述數(shù)據(jù)點(diǎn)在圖標(biāo)中的顯示方式,如圖5-4所示。圖5-3標(biāo)準(zhǔn)繪圖示例5.1.1pyplot基礎(chǔ)語法5.1Matplotlib基礎(chǔ)此外,plot函數(shù)還可以接收第5.1Matplotlib基礎(chǔ)In[4]:importmatplotlib.pyplotaspltimportnumpyasnpx=np.arange(0,np.pi*2,0.01)y1=np.sin(x)y2=np.cos(x)plt.title(sin(x)&cos(x))#添加標(biāo)題plt.xlabel(x)#添加x軸名稱plt.ylabel(y)#添加y軸名稱plt.xlim((0,np.pi*2))#規(guī)定x軸范圍plt.ylim((-1,1))#規(guī)定y軸范圍plt.xticks([0,1,2,3,4,5,6])#規(guī)定x軸刻度plt.yticks([-1,-0.5,0,0.5,1])#規(guī)定y軸刻度plt.plot(x,y1,,x,y2,.)plt.legend([$sin(x)$,$cos(x)$])plt.savefig(f:/sin1.png)5.1.1pyplot基礎(chǔ)語法5.1Matplotlib基礎(chǔ)In[4]:import5.1Matplotlib基礎(chǔ)5.1.1pyplot基礎(chǔ)語法圖5-4不同線形示例Matplotlib還可以在同一圖形中繪制出多種不同的趨勢(shì)圖,如圖5-5所示。5.1Matplotlib基礎(chǔ)5.1.1pyplot基礎(chǔ)語法5.1Matplotlib基礎(chǔ)5.1.1pyplot基礎(chǔ)語法In[5]:importmatplotlib.pyplotaspltimportnumpyasnpx=np.arange(0,np.pi*2,0.01)y1=np.sin(x)y2=np.sin(x-np.pi/2)y3=np.sin(x+np.pi/2)plt.xlabel(‘x’)plt.ylabel(‘y’)plt.xlim((0,np.pi*2))plt.ylim((-1,1))plt.xticks([0,1,2,3,4,5,6])plt.yticks([-1,-0.5,0,0.5,1])plt.plot(x,y1,’b--’,x,y2,’r-’,x,y3,’g’)plt.savefig(f:/sin2.png)5.1Matplotlib基礎(chǔ)5.1.1pyplot基礎(chǔ)語法5.1Matplotlib基礎(chǔ)5.1.1pyplot基礎(chǔ)語法圖5-5不同趨勢(shì)示例到目前為止,我們所用的pyplot命令都是繪制單個(gè)圖形的。pyplot命令也可以同時(shí)繪制多個(gè)圖形,而在每個(gè)圖形中,又可以繪制幾個(gè)不同的子圖。subplot()函數(shù)不僅可以將圖形分為不同的繪圖區(qū)域,還能激活特定子圖,以便用命令控制它。subplot()函數(shù)用參數(shù)設(shè)置分區(qū)模式和當(dāng)前子圖。subplot()函數(shù)的參數(shù)由三個(gè)整數(shù)組成:第一個(gè)數(shù)字決定圖形沿垂直方向被分為幾部分,第二個(gè)數(shù)字決定圖形沿水平方向被分為幾部分,第三個(gè)數(shù)字設(shè)定可以直接用命令控制的子圖。5.1Matplotlib基礎(chǔ)5.1.1pyplot基礎(chǔ)語法5.1Matplotlib基礎(chǔ)plt.plot(t,y1,’b-.')plt.subplot(212)5.1.1pyplot基礎(chǔ)語法下面繪制兩種三角函數(shù)(正弦和余弦函數(shù))趨勢(shì)圖。最佳方式是把畫布分為上下兩個(gè)向水平方向延伸的子圖,如圖5-6所示。因此,作為參數(shù)傳入的兩個(gè)數(shù)字應(yīng)分別為211和212。In[6]:importmatplotlib.pyplotaspltimportnumpyasnpt=np.arange(0,5,0.1)y1=np.sin(2*np.pi*t)y2=np.cos(2*np.pi*t)plt.subplot(211)plt.xlabel('x')plt.ylabel('y')plt.xticks([0,1,2,3,4,5])plt.yticks([-1,-0.5,0,0.5,1])plt.xlabel('x')plt.ylabel('y')plt.xticks([0,1,2,3,4,5,6])plt.yticks([-1,-0.5,0,0.5,1])plt.plot(t,y2,’r-')plt.savefig('f:/5-6.png')5.1Matplotlib基礎(chǔ)plt.plot(t,y1,’5.1Matplotlib基礎(chǔ)5.1.1pyplot基礎(chǔ)語法圖5-6分為上下兩個(gè)子圖還可以把圖形分為左右兩個(gè)子圖。這時(shí),subplot()函數(shù)的參數(shù)為121和122,如圖5-7所示。圖5-7分為左右兩個(gè)子圖5.1Matplotlib基礎(chǔ)5.1.1pyplot基礎(chǔ)語法5.1Matplotlib基礎(chǔ)5.1.1pyplot基礎(chǔ)語法In[7]:importmatplotlib.pyplotaspltimportnumpyasnpt=np.arange(0,1,0.05)y1=np.sin(2*np.pi*t)y2=np.cos(2*np.pi*t)plt.subplot(121)plt.xlabel('x')plt.ylabel('y')plt.xticks([0,0.2,0.4,0.6,0.8,1])plt.yticks([-1,-0.5,0,0.5,1])plt.plot(t,y1,’b-.')plt.subplot(122)plt.xlabel('x')plt.ylabel('y')plt.xticks([0,0.2,0.4,0.6,0.8,1])plt.yticks([-1,-0.5,0,0.5,1])plt.plot(t,y2,’r-')plt.savefig('f:/5-7.png')5.1Matplotlib基礎(chǔ)5.1.1pyplot基礎(chǔ)語法5.1Matplotlib基礎(chǔ)5.1.2設(shè)置圖形屬性1.添加文本根據(jù)前例,標(biāo)題的添加用title()函數(shù)即可,xlabel()和ylabel()函數(shù)專門用于添加軸標(biāo)簽,把要顯示的文本以字符串形式傳給這兩個(gè)函數(shù)作為參數(shù)。還可以用關(guān)鍵字參數(shù)修改屬性。例如,可以修改標(biāo)題的字體,使用更大的字號(hào);指定軸標(biāo)簽的顏色為灰色,從而反襯出圖形的標(biāo)題,如圖5-8所示。圖5-8設(shè)置關(guān)鍵字參數(shù)5.1Matplotlib基礎(chǔ)5.1.2設(shè)置圖形屬性1.5.1Matplotlib基礎(chǔ)5.1.2設(shè)置圖形屬性In[8]:importmatplotlib.pyplotaspltimportnumpyasnpx=np.arange(0,np.pi*2,0.01)y1=np.sin(x)y2=np.cos(x)plt.title('sin(x)&cos(x)',fontsize=20,fontname='TimesNewRoman')plt.xlabel('x',color='gray')plt.ylabel('y',color='gray')plt.xlim((0,np.pi*2))plt.ylim((-1,1))plt.xticks([0,1,2,3,4,5,6])plt.yticks([-1,-0.5,0,0.5,1])plt.plot(x,y1,x,y2)plt.legend(['$sin(x)$','$cos(x)$'])plt.savefig('f:/5-8.png')5.1Matplotlib基礎(chǔ)5.1.2設(shè)置圖形屬性In5.1Matplotlib基礎(chǔ)5.1.2設(shè)置圖形屬性Matplotlib的功能不限于此,pyplot允許在圖形任意位置添加文本。這個(gè)功能由text()函數(shù)來實(shí)現(xiàn)。其語法如下。text(x,y,s,fontdict=None,**kwargs)其中,參數(shù)x、y為文本在圖形中位置的坐標(biāo);s為要添加的字符串;fontdict(可選)為文本要使用的字體;最后,還可以使用關(guān)鍵字參數(shù)。text()函數(shù)的前兩個(gè)參數(shù)為標(biāo)簽在圖形中的位置坐標(biāo),所以使用數(shù)據(jù)點(diǎn)的坐標(biāo)作為標(biāo)簽的坐標(biāo),但每個(gè)標(biāo)簽的值較相應(yīng)數(shù)據(jù)點(diǎn)的值有一點(diǎn)偏差,如圖5-9所示。5.1Matplotlib基礎(chǔ)5.1.2設(shè)置圖形屬性5.1Matplotlib基礎(chǔ)5.1.2設(shè)置圖形屬性In[9]:importmatplotlib.pyplotaspltimportnumpyasnpx=np.arange(0,np.pi*2,0.01)y=np.sin(x)plt.title('sin(x)')plt.xlabel('x')plt.ylabel('y')plt.xticks([0,1,2,3,4,5,6])plt.yticks([-1,-0.5,0,0.5,1])plt.text(0.1,0,‘(0,0)‘)#設(shè)置第一個(gè)點(diǎn)的標(biāo)簽plt.text(1.2,0.8,‘($\pi/2,1)$‘)#設(shè)置第二個(gè)點(diǎn)的標(biāo)簽plt.text(3.14,0.1,‘($\pi,0)$‘)#設(shè)置第三個(gè)點(diǎn)的標(biāo)簽plt.text(4.1,-0.8,'($3\pi/2,-1)$‘)#設(shè)置第四個(gè)點(diǎn)的標(biāo)簽plt.text(5.5,0.1,‘($2\pi,0)$‘)#設(shè)置第五個(gè)點(diǎn)的標(biāo)簽plt.plot(x,y)5.1Matplotlib基礎(chǔ)5.1.2設(shè)置圖形屬性In5.1Matplotlib基礎(chǔ)5.1.2設(shè)置圖形屬性圖5-9添加標(biāo)簽示例Matplotlib是專門為科學(xué)圈開發(fā)的圖形庫,它整合了LaTeX表達(dá)式,支持在圖形中插入數(shù)學(xué)表達(dá)式。將表達(dá)式內(nèi)容置于兩個(gè)$符號(hào)之間,可在文本中添加LaTeX表達(dá)式。解釋器會(huì)將該符號(hào)之間的文本識(shí)別成LaTeX表達(dá)式,把它們轉(zhuǎn)換為數(shù)學(xué)表達(dá)式、公式、數(shù)學(xué)符號(hào)或希臘字母等,然后在圖形中顯示出來。還可以使用關(guān)鍵字參數(shù)進(jìn)一步豐富圖形中的文本。例如,添加描述圖形各數(shù)據(jù)點(diǎn)趨勢(shì)的公式,并為公式添加一個(gè)彩色邊框,如圖5-10所示。5.1Matplotlib基礎(chǔ)5.1.2設(shè)置圖形屬性圖55.1Matplotlib基礎(chǔ)5.1.2設(shè)置圖形屬性In[10]:importmatplotlib.pyplotaspltimportnumpyasnpx=np.arange(0,np.pi*2,0.01)y=np.sin(x)plt.title('sin(x)',fontsize=20,fontname='TimesNewRoman')plt.xlabel('x')plt.ylabel('y')plt.xticks([0,1,2,3,4,5,6])plt.yticks([-1,-0.5,0,0.5,1])plt.text(4.5,0.6,'$y=sin(x)$',fontsize=20,bbox={'facecolor':'yellow','alpha':0.2})plt.plot(x,y)5.1Matplotlib基礎(chǔ)5.1.2設(shè)置圖形屬性In5.1Matplotlib基礎(chǔ)5.1.2設(shè)置圖形屬性圖5-10在圖形中添加數(shù)學(xué)公式2.添加網(wǎng)格圖形中可以添加的另一個(gè)元素是網(wǎng)格。添加網(wǎng)格能更好地理解圖形中每個(gè)數(shù)據(jù)點(diǎn)的位置,因此很有必要。在圖形中添加網(wǎng)格很簡(jiǎn)單,直接在代碼中加入grid()函數(shù),傳入?yún)?shù)True即可,如圖5-11所示。5.1Matplotlib基礎(chǔ)5.1.2設(shè)置圖形屬性圖55.1Matplotlib基礎(chǔ)5.1.2設(shè)置圖形屬性In[11]:importmatplotlib.pyplotaspltimportnumpyasnpx=np.arange(0,np.pi*2,0.01)y=np.sin(x)plt.title('sin(x)',fontsize=20,fontname='TimesNewRoman')plt.xlabel('x')plt.ylabel('y')plt.xticks([0,1,2,3,4,5,6])plt.yticks([-1,-0.5,0,0.5,1])plt.text(4.5,0.6,'$y=sin(x)$',fontsize=20,bbox={'facecolor':'yellow','alpha':0.2})plt.grid(True)plt.plot(x,y)5.1Matplotlib基礎(chǔ)5.1.2設(shè)置圖形屬性In5.1Matplotlib基礎(chǔ)5.1.2設(shè)置圖形屬性圖5-11在圖形中添加網(wǎng)格5.1Matplotlib基礎(chǔ)5.1.2設(shè)置圖形屬性圖55.1Matplotlib基礎(chǔ)5.1.2設(shè)置圖形屬性3.添加圖例每一個(gè)圖形都應(yīng)該有的元素是圖例。pyplot專門提供了legend()函數(shù),用于操作該類對(duì)象,如圖5-12和圖5-13所示。In[12]:importmatplotlib.pyplotaspltimportnumpyasnpx=np.arange(0,np.pi*2,0.01)y1=np.sin(x)y2=np.cos(x)plt.title('sin(x)&cos(x)')plt.xlabel('x')plt.ylabel('y')plt.xlim((0,np.pi*2))plt.ylim((-1,1))plt.xticks([0,1,2,3,4,5,6])plt.yticks([-1,-0.5,0,0.5,1])plt.plot(x,y1,x,y2)plt.legend(['$sin(x)$','$cos(x)$'],loc=0)5.1Matplotlib基礎(chǔ)5.1.2設(shè)置圖形屬性3.5.1Matplotlib基礎(chǔ)5.1.2設(shè)置圖形屬性圖5-12圖例在最佳位置圖5-13圖例在上方居中位置5.1Matplotlib基礎(chǔ)5.1.2設(shè)置圖形屬性圖55.1Matplotlib基礎(chǔ)5.1.2設(shè)置圖形屬性圖例的位置由loc關(guān)鍵字控制,其取值范圍為0~10。每個(gè)數(shù)字代表圖形中的一處位置,如表5-4所示。5.1Matplotlib基礎(chǔ)5.1.2設(shè)置圖形屬性Matplotlib數(shù)據(jù)可視化5.2Matplotlib數(shù)據(jù)可視化5.25.2Matplotlib數(shù)據(jù)可視化5.2.1散點(diǎn)圖散點(diǎn)圖(scatterdiagram)又稱為散點(diǎn)分布圖,是以一個(gè)特征為橫坐標(biāo),以另一個(gè)特征為縱坐標(biāo),利用坐標(biāo)點(diǎn)(散點(diǎn))的分布形態(tài)反映特征間的統(tǒng)計(jì)關(guān)系的一種圖形。值由點(diǎn)在圖表中的位置表示,類別由圖表中的不同標(biāo)記表示,通常用于比較跨類別的數(shù)據(jù)。散點(diǎn)圖可以提供以下兩類關(guān)鍵信息。(1)特征之間是否存在數(shù)值或數(shù)量的關(guān)聯(lián)趨勢(shì),關(guān)聯(lián)趨勢(shì)是線性的還是非線性的。(2)如果某一個(gè)點(diǎn)或某幾個(gè)點(diǎn)偏離大多數(shù)點(diǎn),則這些點(diǎn)是離群值。通過散點(diǎn)圖可以一目了然,從而進(jìn)一步分析離群值是否在建模分析中產(chǎn)生很大的影響。散點(diǎn)圖通過散點(diǎn)的疏密程度和變化趨勢(shì)表示兩個(gè)特征的數(shù)量關(guān)系。如果有3個(gè)特征,若其中一個(gè)特征為類別型,散點(diǎn)圖改變不同特征的點(diǎn)的形狀或顏色,即可了解兩個(gè)數(shù)值型特征和這個(gè)類別型特征之間的關(guān)系。5.2Matplotlib數(shù)據(jù)可視化5.2.1散點(diǎn)圖5.2Matplotlib數(shù)據(jù)可視化5.2.1散點(diǎn)圖pyplot中繪制散點(diǎn)圖的函數(shù)為scatter(),其使用方法如下。pyplot.scatter(x,y,s=None,c=None,marker=None,cmap=None,norm=None,vmin=None,vmax=None,alpha=None,linewidths=None,verts=None,edgecolors=None,hold=None,data=None,**kwargs)scatter()函數(shù)常用參數(shù)及其說明如表5-5所示。5.2Matplotlib數(shù)據(jù)可視化5.2.1散點(diǎn)圖py5.2Matplotlib數(shù)據(jù)可視化5.2.1散點(diǎn)圖利用scatter()函數(shù)繪制散點(diǎn)圖,如下例所示。圖形如圖5-14所示。5.2Matplotlib數(shù)據(jù)可視化5.2.1散點(diǎn)圖利用5.2Matplotlib數(shù)據(jù)可視化5.2.1散點(diǎn)圖In[13]:importmatplotlib.pyplotaspltimportnumpyasnpimportmatplotlibx=np.arange(0.0,50.0,0.5)y=x**1.3+np.random.rand(*x.shape)*30.0plt.scatter(x,y,c='r',marker='.')plt.xlabel("x")plt.ylabel("y")plt.show()5.2Matplotlib數(shù)據(jù)可視化5.2.1散點(diǎn)圖In5.2Matplotlib數(shù)據(jù)可視化5.2.1散點(diǎn)圖圖5-14散點(diǎn)圖示例使用不同顏色、不同形狀的點(diǎn),可以繪制不同趨勢(shì)的散點(diǎn)圖,如圖5-15所示。圖5-15多趨勢(shì)散點(diǎn)圖示例5.2Matplotlib數(shù)據(jù)可視化5.2.1散點(diǎn)圖圖55.2Matplotlib數(shù)據(jù)可視化5.2.1散點(diǎn)圖In[14]:importmatplotlib.pyplotaspltimportnumpyasnpimportmatplotlibx=np.arange(0.0,50.0,0.5)y1=x**1.3+np.random.rand(*x.shape)*30.0y2=x**0.5+np.random.rand(*x.shape)*30.0plt.scatter(x,y1,marker='.')plt.scatter(x,y2,marker='*')plt.xlabel("x")plt.ylabel("y")plt.show()5.2Matplotlib數(shù)據(jù)可視化5.2.1散點(diǎn)圖In5.2Matplotlib數(shù)據(jù)可視化5.2.2線形圖在圖形的所有類型中,線形圖最簡(jiǎn)單。線形圖的各個(gè)數(shù)據(jù)點(diǎn)由一條線來連接。一對(duì)對(duì)(x,y)值組成的數(shù)據(jù)點(diǎn)在圖形中的位置取決于兩條軸的刻度范圍。若要繪制一個(gè)普通的數(shù)學(xué)函數(shù)的圖形,只需繪制數(shù)學(xué)函數(shù)生成的一系列數(shù)據(jù)點(diǎn)。為此,需要?jiǎng)?chuàng)建兩個(gè)NumPy數(shù)組。首先,創(chuàng)建包含x值的數(shù)組,用作x軸。用np.arange()函數(shù)定義一個(gè)元素依次遞增的序列,然后用np.sinx()函數(shù)可以直接求得這一系列x值所對(duì)應(yīng)的y值,如下例所示。圖形如圖5-16所示。In[15]:importmatplotlib.pyplotaspltimportnumpyasnpx=np.arange(-2*np.pi,2*np.pi,0.01)y=np.sin(2*x)/xplt.plot(x,y)圖5-16線形圖表示數(shù)學(xué)函數(shù)5.2Matplotlib數(shù)據(jù)可視化5.2.2線形圖5.2Matplotlib數(shù)據(jù)可視化5.2.2線形圖我們也可以將一組函數(shù)的圖形畫在一張圖上。Matplotlib自動(dòng)為每條線分配一種不同的顏色。幾個(gè)函數(shù)的圖像使用相同的刻度范圍,即每個(gè)序列的數(shù)據(jù)點(diǎn)使用相同的x軸和y軸。Figure對(duì)象會(huì)先記錄先前的命令,每次調(diào)用plot()函數(shù)都會(huì)考慮之前是怎么調(diào)用的,并根據(jù)函數(shù)的調(diào)用方法實(shí)現(xiàn)相應(yīng)的效果,直到該對(duì)象不再顯示為止,如下例所示。圖形如圖5-17所示。In[16]:importmatplotlib.pyplotaspltimportnumpyasnpx=np.arange(-2*np.pi,2*np.pi,0.01)y1=np.sin(x)/xy2=np.sin(3*x)/xy3=np.sin(4*x)/xplt.plot(x,y1)plt.plot(x,y2)plt.plot(x,y3)5.2Matplotlib數(shù)據(jù)可視化5.2.2線形圖5.2Matplotlib數(shù)據(jù)可視化5.2.2線形圖圖5-17線形圖表示三個(gè)數(shù)學(xué)函數(shù)可以根據(jù)需要自己選擇線形、顏色等。用plot()函數(shù)的第三個(gè)參數(shù)指定顏色、線形,把這些設(shè)置所用的字符編碼放到同一個(gè)字符串即可。顏色編碼如表5-6所示,圖形如圖5-18所示。5.2Matplotlib數(shù)據(jù)可視化5.2.2線形圖圖55.2Matplotlib數(shù)據(jù)可視化5.2.2線形圖圖5-18用字符編碼指定顏色和線形5.2Matplotlib數(shù)據(jù)可視化5.2.2線形圖圖55.2Matplotlib數(shù)據(jù)可視化5.2.2線形圖x軸的數(shù)值范圍為(-2π,2π),但是刻度標(biāo)簽?zāi)J(rèn)使用數(shù)值形式。我們用π的倍數(shù)代替數(shù)值,需要使用含有LaTeX表達(dá)式的字符串,如下例所示。圖形如5-19所示。In[17]:importmatplotlib.pyplotaspltimportnumpyasnpx=np.arange(-2*np.pi,2*np.pi,0.01)y1=np.sin(x)/xy2=np.sin(3*x)/xy3=np.sin(4*x)/xplt.plot(x,y1,’k--',linewidth=3)plt.plot(x,y2,’m-.')plt.plot(x,y3,color='#87a3cc',linestyle=‘--')5.2Matplotlib數(shù)據(jù)可視化5.2.2線形圖5.2Matplotlib數(shù)據(jù)可視化5.2.2線形圖圖5-19改進(jìn)刻度標(biāo)簽5.2Matplotlib數(shù)據(jù)可視化5.2.2線形圖圖55.2Matplotlib數(shù)據(jù)可視化5.2.2線形圖In[18]:importmatplotlib.pyplotaspltimportnumpyasnpx=np.arange(-2*np.pi,2*np.pi,0.01)y1=np.sin(x)/xy2=np.sin(3*x)/xy3=np.sin(4*x)/xplt.plot(x,y1)plt.plot(x,y2)plt.plot(x,y3)plt.xticks([-2*np.pi,-np.pi,0,np.pi,2*np.pi],['$-2\pi$',’$-\pi$','$0$','$\pi$','$2\pi$'])plt.yticks([-1,0,+1,+2,+3,+4],['$-1$','$0$','$+1$','$+2$','$+3$','$+4$'])plt.savefig('f:/5-19.png')5.2Matplotlib數(shù)據(jù)可視化5.2.2線形圖In5.2Matplotlib數(shù)據(jù)可視化5.2.2線形圖在上述所有的線性圖中,x軸和y軸總是置于Figure的邊緣(與圖像的邊緣重合)。我們可以改變坐標(biāo)軸的位置顯示,讓兩條軸穿過原點(diǎn)(0,0),也就是笛卡兒坐標(biāo)軸。首先用gca()函數(shù)獲取Axes對(duì)象,接著通過這個(gè)對(duì)象指定每條邊的位置:右、左、下、上,選擇組成圖形邊框的每條邊。使用set_color()函數(shù)把顏色設(shè)置成none,刪除和坐標(biāo)軸不符合的邊(右和上)。然后,用set_position()函數(shù)移動(dòng)x軸和y軸相符的邊框,使其穿過原點(diǎn)(0,0)。5.2Matplotlib數(shù)據(jù)可視化5.2.2線形圖5.2Matplotlib數(shù)據(jù)可視化5.2.2線形圖In[19]:importmatplotlib.pyplotaspltimportnumpyasnpx=np.arange(-2*np.pi,2*np.pi,0.01)y1=np.sin(x)/xy2=np.sin(3*x)/xy3=np.sin(4*x)/xplt.plot(x,y1)plt.plot(x,y2)plt.plot(x,y3)plt.xticks([-2*np.pi,-np.pi,0,np.pi,2*np.pi],['$-2\pi$',’$-\pi$','$0$','$\pi$','$2\pi$'])plt.yticks([-1,0,+1,+2,+3,+4],['$-1$','$0$','$+1$','$+2$','$+3$','$+4$'])5.2Matplotlib數(shù)據(jù)可視化5.2.2線形圖In5.2Matplotlib數(shù)據(jù)可視化5.2.2線形圖ax=plt.gca()ax.spines['right'].set-color('none')ax.spines['top'].set-color('none')ax.xaxis.set-ticks-position('bottom')ax.spines['bottom'].set-position(('data',0))ax.yaxis.set-ticks-position('left')ax.spines['left'].set-position(('data',0))5.2Matplotlib數(shù)據(jù)可視化5.2.2線形圖ax5.2Matplotlib數(shù)據(jù)可視化5.2.2線形圖這時(shí),兩條軸在圖表中部位置交叉,這個(gè)位置就是笛卡兒坐標(biāo)系的原點(diǎn),如圖5-20所示。圖5-20笛卡兒坐標(biāo)系5.2Matplotlib數(shù)據(jù)可視化5.2.2線形圖這時(shí)5.2Matplotlib數(shù)據(jù)可視化5.2.2線形圖用箭頭標(biāo)明曲線上某一數(shù)據(jù)點(diǎn)的位置非常有用。Matplotlib庫的annotate()函數(shù)特別適用于添加注釋。annotate()函數(shù)有多個(gè)關(guān)鍵字參數(shù),這些參數(shù)可以改善顯示效果,如下例所示。圖形如圖5-21所示。In[20]:importmatplotlib.pyplotaspltimportnumpyasnpx=np.arange(-2*np.pi,2*np.pi,0.01)y1=np.sin(x)/xy2=np.sin(3*x)/xy3=np.sin(4*x)/xplt.plot(x,y1)plt.plot(x,y2)plt.plot(x,y3)5.2Matplotlib數(shù)據(jù)可視化5.2.2線形圖5.2Matplotlib數(shù)據(jù)可視化5.2.2線形圖plt.xticks([-2*np.pi,-np.pi,0,np.pi,2*np.pi],['$-2\pi$',’$-\pi$','$0$','$\pi$','$2\pi$'])plt.yticks([-1,0,+1,+2,+3,+4],['$-1$','$0$','$+1$','$+2$','$+3$','$+4$'])plt.annotate(r'$\lim_{x\to0}\frac{\sin(x)}{x}=1$',xy=[0,1],xycoords='data',xytext=[30,30],fontsize=16,textcoords='offsetpoints',arrowprops=dict(arrowstyle=">",connectionstyle="arc3,rad=.2"))ax=plt.gca()ax.spines['right'].set_color('none')ax.spines['top'].set_color('none')ax.xaxis.set_ticks_position('bottom')ax.spines['bottom'].set_position(('data',0))ax.yaxis.set_ticks_position('left')ax.spines['left'].set_position(('data',0))5.2Matplotlib數(shù)據(jù)可視化5.2.2線形圖pl5.2Matplotlib數(shù)據(jù)可視化5.2.2線形圖圖5-21添加數(shù)學(xué)表達(dá)式對(duì)于pandas庫的DataFrame數(shù)據(jù)結(jié)構(gòu),Matplotlib很輕松就可以將其轉(zhuǎn)換成線形圖,只需把DataFrame作為參數(shù)傳入plot()函數(shù),就能得到多序列線形圖,如圖5-22所示。5.2Matplotlib數(shù)據(jù)可視化5.2.2線形圖圖55.2Matplotlib數(shù)據(jù)可視化5.2.2線形圖In[21]:importpandasaspddf=pd.read_csv('f:/loandata8.csv')x=np.arange(68)plt.plot(x,df)plt.legend(df,loc=0)圖5-22將DataFrame數(shù)據(jù)結(jié)構(gòu)做成多序列線形圖5.2Matplotlib數(shù)據(jù)可視化5.2.2線形圖In5.2Matplotlib數(shù)據(jù)可視化5.2.3直方圖hist(x,bins=None,normed=False,color=None,stacked=False,…,**kwargs)直方圖又稱質(zhì)量分布圖,是統(tǒng)計(jì)報(bào)告圖的一種,由一系列高度不等的縱向相鄰矩形組成。矩形的面積與落在其x軸所對(duì)應(yīng)區(qū)間的元素?cái)?shù)量成正比。直方圖常被用于樣本分布等統(tǒng)計(jì)研究。pyplot用于繪制直方圖的函數(shù)為hist(),其常用語法如下。5.2Matplotlib數(shù)據(jù)可視化5.2.3直方圖hi5.2Matplotlib數(shù)據(jù)可視化5.2.3直方圖In[22]:importmatplotlib.pyplotaspltimportnumpyasnpy=np.random.standard_normal((600,2))plt.hist(y,bins=20,label=['1st','2nd'])plt.grid(True)plt.legend(loc=0)plt.xlabel('Value')plt.ylabel('Frequency')plt.title('Histogram')使用hist()函數(shù)繪制直方圖,如下例所示。圖形如圖5-23所示。5.2Matplotlib數(shù)據(jù)可視化5.2.3直方圖In5.2Matplotlib數(shù)據(jù)可視化5.2.3直方圖圖5-23直方圖示例我們還可以生成兩個(gè)數(shù)據(jù)集堆疊的直方圖。plt.hist(y,bins=20,label=['1st','2nd'],color=['b','m'],stacked=True,rwidth=0.8)的參數(shù)“stacked=True”表示堆疊的直方圖,“rwidth=0.8”表示修改條塊的相對(duì)寬度為0.8,“color=['b','m']”表示顏色分別取藍(lán)色、品紅,如圖5-24所示。5.2Matplotlib數(shù)據(jù)可視化5.2.3直方圖圖55.2Matplotlib數(shù)據(jù)可視化5.2.3直方圖圖5-24堆疊直方圖示例In[23]:importmatplotlib.pyplotaspltimportnumpyasnpy=np.random.standard_normal((600,2))plt.hist(y,bins=20,label=['1st','2nd'],color=['b','m'],stacked=True,rwidth=0.8)plt.grid(True)plt.legend(loc=0)plt.xlabel('Value')plt.ylabel('Frequency')plt.title('Histogram')5.2Matplotlib數(shù)據(jù)可視化5.2.3直方圖圖55.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖1.垂直條狀圖條狀圖是一種常用的圖表類型,它與直方圖相似,只不過x軸表示的不是數(shù)值而是類別。用Matplotlib的bar()函數(shù)很容易生成條狀圖。bar()函數(shù)的常用語法如下。bar(left,height,width=0.8,bottom=None,hold=None,**kwargs)bar()函數(shù)常用參數(shù)及其說明如表5-8所示。5.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖1.5.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖使用bar()函數(shù)繪制條形圖,如下例所示。圖形如圖5-25所示。圖5-25簡(jiǎn)單條狀圖In[24]:importmatplotlib.pyplotaspltimportnumpyasnpx=[0,1,2,3,4]y=[5,7,3,4,6]plt.bar(x,y)plt.xlabel('x')plt.ylabel('y')5.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖使用5.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖我們還可以通過在bar()函數(shù)中添加特定的關(guān)鍵字參數(shù)進(jìn)一步改進(jìn)條狀圖。把包含標(biāo)準(zhǔn)差的序列傳給yerr關(guān)鍵字參數(shù),就能添加標(biāo)準(zhǔn)差,如圖5-26所示。In[25]:importmatplotlib.font_managerasfmimportmatplotlib.pyplotaspltimportnumpyasnpzhfont1=fm.FontProperties(fname='C:\Windows\Fonts\msyh.ttc')x=[0,1,2,3,4]y=[5,7,3,4,6]std1=[0.8,1,0.4,0.9,1.3]plt.title(u'條狀圖',fontproperties=zhfont1)plt.bar(x,y,yerr=std1,error_kw={'ecolor':'0.1','capsize':6},alpha=0.7)plt.xlabel('x')plt.ylabel('y')5.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖5.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖圖5-26帶有誤差線的垂直條狀圖2.水平條狀圖在實(shí)際應(yīng)用中,我們常常用到水平方向的條狀圖。這種模式的條狀圖用barh()函數(shù)實(shí)現(xiàn)。bar()函數(shù)的參數(shù)和關(guān)鍵字參數(shù)對(duì)該函數(shù)依然有效。唯一需要注意的是,兩條軸的用途與垂直條狀圖剛好相反。在水平條狀圖中,類別分布在y軸上,數(shù)值顯示在x軸上。使用barh()函數(shù)繪制條形圖如下例所示,圖形如圖5-27所示。5.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖圖55.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖In[26]:importmatplotlib.font_managerasfmimportmatplotlib.pyplotaspltimportnumpyasnpzhfont1=fm.FontProperties(fname='C:\Windows\Fonts\msyh.ttc')x=[0,1,2,3,4]y=[5,7,3,4,6]std1=[0.8,1,0.4,0.9,1.3]plt.title(u'水平條狀圖',fontproperties=zhfont1)plt.barh(x,y,xerr=std1,error_kw={'ecolor':'0.1','capsize':6},alpha=0.7)plt.xlabel('x')plt.ylabel('y')5.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖In5.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖圖5-27水平條狀圖3.多序列條狀圖條狀圖可以用來顯示多個(gè)序列的數(shù)值,方法是把每個(gè)類別占據(jù)的空間分為多個(gè)部分。想顯示幾個(gè)長(zhǎng)條,就將其分為幾部分。最好增加一個(gè)額外的空間,以便區(qū)分兩個(gè)相鄰的類別,如下例所示。圖形如圖5-28所示。5.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖圖55.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖In[27]:importmatplotlib.font_managerasfmimportmatplotlib.pyplotaspltimportnumpyasnpzhfont1=fm.FontProperties(fname='C:\Windows\Fonts\msyh.ttc')x=np.arange(5)y1=[5,7,3,4,6]y2=[6,6,4,5,7]y3=[5,6,5,4,6]bw=0.3plt.title(u'多序列條狀圖',fontproperties=zhfont1)plt.bar(x,y1,bw,color='b')plt.bar(x+bw,y2,bw,color='g')plt.bar(x+2*bw,y3,bw,color='r')plt.xticks(x+1.5*bw,['A','B','C','D','E'])5.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖In5.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖圖5-28三個(gè)序列條狀圖多序列水平條狀圖的生成方法也很簡(jiǎn)單。用barh()函數(shù)替換bar()函數(shù),同時(shí)用yticks()函數(shù)替換xticks()函數(shù)即可,如下例所示,圖形如圖5-29所示。5.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖圖55.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖In[28]:importmatplotlib.font_managerasfmimportmatplotlib.pyplotaspltimportnumpyasnpzhfont1=fm.FontProperties(fname='C:\Windows\Fonts\msyh.ttc')x=np.arange(5)y1=[5,7,3,4,6]y2=[6,6,4,5,7]y3=[5,6,5,4,6]bw=0.3plt.title(u'多序列水平條狀圖',fontproperties=zhfont1)plt.barh(x,y1,bw,color='b')plt.barh(x+bw,y2,bw,color='g')plt.barh(x+2*bw,y3,bw,color='r')plt.yticks(x+1.5*bw,['A','B','C','D','E'])5.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖In5.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖圖5-29三個(gè)序列水平條狀圖5.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖圖55.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖4.多序列堆積條狀圖多序列條狀圖的另外一種表現(xiàn)形式是堆積條狀圖,幾個(gè)條狀圖形堆積在一起形成一個(gè)更大的長(zhǎng)條。如果想表示總和是由幾個(gè)條狀圖相加得到的,堆積圖就特別合適。要把簡(jiǎn)單的多序列條狀圖轉(zhuǎn)換為堆積圖,需要在每個(gè)bar()函數(shù)中添加bottom關(guān)鍵字參數(shù),把每個(gè)序列賦給相應(yīng)的bottom關(guān)鍵字參數(shù),如下例所示。圖形如圖5-30所示。圖5-30多序列堆積條狀圖5.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖4.5.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖In[29]:importmatplotlib.font_managerasfmimportmatplotlib.pyplotaspltimportnumpyasnpzhfont1=fm.FontProperties(fname='C:\Windows\Fonts\msyh.ttc')x=np.arange(4)y1=np.array([5,2,3,4])y2=np.array([2,1,2,1])y3=np.array([2,3,3,1])plt.title(u'多序列堆積條狀圖',fontproperties=zhfont1)plt.axis=([0,4,0,15])plt.bar(x,y1,color='r')plt.bar(x,y2,color='b',bottom=y1)plt.bar(x,y3,color='g',bottom=(y1+y2))plt.xticks(x,['2014','2015','2016','2017','2018'])5.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖In5.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖同樣地,要?jiǎng)?chuàng)建相應(yīng)的水平堆積條狀圖,則需用barh()函數(shù)替換bar()函數(shù)和相應(yīng)參數(shù),如下例如示。圖形如圖5-31所示。In[30]:importmatplotlib.font_managerasfmimportmatplotlib.pyplotaspltimportnumpyasnpzhfont1=fm.FontProperties(fname='C:\Windows\Fonts\msyh.ttc')x=np.arange(4)y1=np.array([5,2,3,4])y2=np.array([2,1,2,1])y3=np.array([2,3,3,1])plt.title(u'多序列堆積水平條狀圖',fontproperties=zhfont1)plt.axis=([0,4,0,15])plt.barh(x,y1,color='r')plt.barh(x,y2,color='b',left=y1)plt.barh(x,y3,color='g',left=(y1+y2))plt.yticks(x,['2014','2015','2016','2017','2018'])5.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖5.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖圖5-31多序列堆積水平條狀圖我們還可以用不同的影線填充條狀圖。首先把條狀圖顏色設(shè)置成白色,然后用hatch關(guān)鍵字參數(shù)指定影線的類型。不同的影線使用不同的字符(|、/、-、\、*)表示,同一符號(hào)出現(xiàn)的次數(shù)越多,則形成陰影的線條越密集。例如,///比//密集,而//比/密集,如下例所示。圖形如圖5-32所示5.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖圖55.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖In[31]:importmatplotlib.font_managerasfmimportmatplotlib.pyplotaspltimportnumpyasnpzhfont1=fm.FontProperties(fname='C:\Windows\Fonts\msyh.ttc')x=np.arange(4)y1=np.array([5,2,3,4])y2=np.array([2,1,2,1])y3=np.array([2,3,3,1])plt.title(u'多序列堆積影線條狀圖',fontproperties=zhfont1)plt.axis=([0,4,0,15])plt.bar(x,y1,color='w',hatch='xx')plt.bar(x,y2,color='w',hatch='//////',bottom=y1)plt.bar(x,y3,color='w',hatch='\\\\',bottom=(y1+y2))plt.xticks(x,['2014','2015','2016','2017','2018'])5.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖In5.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖圖5-32堆積影線圖另外一種非常有用的圖形表示方法是用條狀圖表現(xiàn)對(duì)比關(guān)系。兩列有著共同類別的數(shù)據(jù),其條狀圖形分別列于x軸兩側(cè),沿y軸方向生長(zhǎng)。要生成這類圖形,需要事先對(duì)其中一個(gè)序列的y值進(jìn)行取相反數(shù)操作,如下例所示。圖形如圖5-33所示。5.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖圖55.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖In[32]:importmatplotlib.pyplotaspltimportnumpyasnpx0=np.arange(8)y1=np.array([1,3,4,6,4,3,2,1])y2=np.array([1,2,5,4,3,3,2,1])plt.ylim=(-8,8)plt.bar(x0,y1,0.9,facecolor='r',edgecolor='w')plt.bar(x0,-y2,0.9,facecolor='b',edgecolor='w')plt.xticks(())forx,yinzip(x0,y1):plt.text(x,y+0.05,'%d'%y,ha='center',va='bottom')forx,yinzip(x0,y2):plt.text(x,-y-0.05,'%d'%y,ha='center',va='top')5.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖5.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖圖5-33條狀對(duì)比圖5.2Matplotlib數(shù)據(jù)可視化5.2.4條狀圖圖55.2Matplotlib數(shù)據(jù)可視化5.2.5餅圖餅圖(piegraph)是將各項(xiàng)的大小與各項(xiàng)的總和的比例顯示在一張“餅”中,以“餅”的大小來確定每一項(xiàng)的占比。餅圖可以比較清楚地反映出部分與部分、部分與整體之間的比例關(guān)系,易于顯示每組數(shù)據(jù)相對(duì)于總數(shù)的大小,而且顯示方式直觀。pyplot中繪制餅圖的函數(shù)為pie(),其基本使用語法如下。pie(x,explode=None,labels=None,colors=None,autopct=None,pctdistance=0.6,hadow=False,labeldistance=1.1,startangle=None,radius=None)pie()函數(shù)常用參數(shù)及其說明如表5-9所示。5.2Matplotlib數(shù)據(jù)可視化5.2.5餅圖5.2Matplotlib數(shù)據(jù)可視化5.2.5餅圖5.2Matplotlib數(shù)據(jù)可視化5.2.5餅圖5.2Matplotlib數(shù)據(jù)可視化5.2.5餅圖利用pie()函數(shù)繪制餅圖,如下例所示。In[33]:importmatplotlib.pyplotaspltlabels=['Apple','Samsung','Huawei','Xiaomi']values=[45,30,15,10]colors=['yellow','red','green','blue']plt.pie(values,labels=labels,colors=colors)圖5-34簡(jiǎn)單的餅圖5.2Matplotlib數(shù)據(jù)可視化5.2.5餅圖利用5.2Matplotlib數(shù)據(jù)可視化5.2.5餅圖可以用title()函數(shù)為餅圖添加標(biāo)題,用startangle關(guān)鍵字參數(shù)調(diào)整餅圖的旋轉(zhuǎn)角度,用autopct在每一塊的中間位置添加標(biāo)簽顯示百分比,如下例所示。圖形如5-35所示。In[34]:importmatplotlib.pyplotaspltlabels=['Apple','Samsung','Huawei','Xiaomi']values=[45,30,15,10]colors=['yellow','red','blue','green']explode=[0,0,0,0.3]plt.pie(values,labels=labels,explode=explode,colors=colors,shadow=True,autopct='%3.1f%%',startangle=180)plt.axis('equal')圖5-35帶標(biāo)簽的餅圖5.2Matplotlib數(shù)據(jù)可視化5.2.5餅圖5.2Matplotlib數(shù)據(jù)可視化5.2.6箱線圖箱線圖(boxplot)也稱箱須圖,其繪制需使用常用的統(tǒng)計(jì)量,能提供有關(guān)數(shù)據(jù)位置和分散情況的關(guān)鍵信息,尤其在比較不同特征時(shí),更可表現(xiàn)其分散程度差異。圖5-36標(biāo)出了箱線圖中每條線的含義。圖5-36箱線圖中每條線的含義5.2Matplotlib數(shù)據(jù)可視化5.2.6箱線圖5.2Matplotlib數(shù)據(jù)可視化5.2.6箱線圖箱線圖利用數(shù)據(jù)中的5個(gè)統(tǒng)計(jì)量(最小值、下四分位數(shù)、中位數(shù)、上四分位數(shù)和最大值)來描述數(shù)據(jù),它也可以粗略地看出數(shù)據(jù)是否具有對(duì)稱性、分布的分散程度等信息,特別適用于對(duì)幾個(gè)樣本的比較。pyplot中繪制箱線圖的函數(shù)為boxplot(),其基本使用語法如下。matplotlib.pyplot.boxplot(x,notch=None,sym=None,vert=None,whis=None,positions=None,widths=None,patch_artist=None,meanline=None,labels=None,…)boxplot()函數(shù)的常用參數(shù)及其說明如表5-10所示。5.2Matplotlib數(shù)據(jù)可視化5.2.6箱線圖5.2Matplotlib數(shù)據(jù)可視化5.2.6箱線圖5.2Matplotlib數(shù)據(jù)可視化5.2.6箱線圖5.2Matplotlib數(shù)據(jù)可視化5.2.6箱線圖利用boxplot()函數(shù)繪制箱線圖,如下例所示。圖形如圖5-37所示。In[35]:importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltnp.random.seed(100)#生成隨機(jī)數(shù)data=np.random.normal(size=1000,loc=0,scale=1)plt.boxplot(data,sym=‘o’,whis=1.5)#sym='o'異常值的形狀圖5-37單個(gè)箱線圖5.2Matplotlib數(shù)據(jù)可視化5.2.6箱線圖利5.2Matplotlib數(shù)據(jù)可視化5.2.6箱線圖也可以把多個(gè)箱線圖畫在一張圖上,如圖5-38所示。In[36]:importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltnp.random.seed(100)#生成隨機(jī)數(shù)data=np.random.normal(size=(1000,4),loc=0,scale=1)#1000個(gè)值的4維數(shù)組lables=['A','B','C','D']plt.boxplot(data,labels=labels)圖5-38多個(gè)箱線圖5.2Matplotlib數(shù)據(jù)可視化5.2.6箱線圖也人口數(shù)據(jù)分析5.3人口數(shù)據(jù)分析5.35.3案例:人口數(shù)據(jù)分析人口數(shù)據(jù)總共擁有6個(gè)特征,分別為年份、年末總?cè)丝?、男性人口、女性人口、城?zhèn)人口和鄉(xiāng)村人口。要求查看各個(gè)特征隨著時(shí)間推移發(fā)生的變化情況,分析未來男女人口比例、
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO 14785:2024 EN Tourism and related services -Tourist information services - Requirements and recommendations
- 企業(yè)行政年終個(gè)人工作總結(jié)
- 中秋領(lǐng)導(dǎo)精彩致辭范文(7篇)
- DB12T 471-2012 在用汽車噴烤漆房使用安全技術(shù)規(guī)范
- 九月開學(xué)典禮活動(dòng)主持詞范文(8篇)
- 中秋感恩會(huì)主持詞范文(6篇)
- 中秋節(jié)員工慰問信范文(11篇)
- 豬的課件教學(xué)課件
- 影響燃燒的因素
- 永久基本農(nóng)田數(shù)據(jù)庫規(guī)范 編制說明
- 民間借貸利息計(jì)算表
- 滬科版(2024)八年級(jí)全一冊(cè)物理第一學(xué)期期中學(xué)業(yè)質(zhì)量測(cè)試卷 2套(含答案)
- 實(shí)驗(yàn)室家具工程施工組織方案
- 小學(xué)數(shù)學(xué)教學(xué)“數(shù)學(xué)好玩”探析
- 畫法幾何及機(jī)械制圖(第六版)1-1
- 設(shè)備運(yùn)行分析報(bào)告(模板)
- 獨(dú)特的我PPT課件
- 施工現(xiàn)場(chǎng)平面布置圖
- 精神病醫(yī)院住院患者護(hù)理評(píng)估單
- 生活中的音樂教案
- 辯論賽評(píng)分表(完整版)-
評(píng)論
0/150
提交評(píng)論