yhon科學(xué)計算與數(shù)據(jù)處理二_第1頁
yhon科學(xué)計算與數(shù)據(jù)處理二_第2頁
yhon科學(xué)計算與數(shù)據(jù)處理二_第3頁
yhon科學(xué)計算與數(shù)據(jù)處理二_第4頁
yhon科學(xué)計算與數(shù)據(jù)處理二_第5頁
已閱讀5頁,還剩78頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Matplotlib—繪制精美的圖表1目錄快速繪圖快速繪圖繪制多軸圖坐標(biāo)軸設(shè)定繪圖函數(shù)簡介對數(shù)坐標(biāo)圖極坐標(biāo)圖柱狀圖散列圖

2目錄圖像等值線圖三維繪圖34快速繪圖快速繪圖matplotlib的pyplot子庫提供了和matlab類似的繪圖API,方便用戶快速繪制2D圖表。(matplotlib_simple_plot.py)

pylab模塊matplotlib還提供了名為pylab的模塊,其中包括了許多numpy和pyplot中常用的函數(shù),方便用戶快速進(jìn)行計算和繪圖,可以用于IPython中的快速交互式使用。

5快速繪圖matplotlib中的快速繪圖的函數(shù)庫可以通過如下語句載入:接下來調(diào)用figure創(chuàng)建一個繪圖對象,并且使它成為當(dāng)前的繪圖對象。通過figsize參數(shù)可以指定繪圖對象的寬度和高度,單位為英寸;dpi參數(shù)指定繪圖對象的分辨率,即每英寸多少個像素,缺省值為80。因此本例中所創(chuàng)建的圖表窗口的寬度為8*80=640像素。importmatplotlib.pyplotaspltplt.figure(figsize=(8,4))6快速繪圖也可以不創(chuàng)建繪圖對象直接調(diào)用接下來的plot函數(shù)直接繪圖,matplotlib會自動創(chuàng)建一個繪圖對象。

如果需要同時繪制多幅圖表的話,可以是給figure傳遞一個整數(shù)參數(shù)指定圖標(biāo)的序號,如果所指定序號的繪圖對象已經(jīng)存在的話,將不創(chuàng)建新的對象,而只是讓它成為當(dāng)前繪圖對象。下面的兩行程序通過調(diào)用plot函數(shù)在當(dāng)前的繪圖對象中進(jìn)行繪圖:plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)plt.plot(x,z,"b--",label="$cos(x^2)$")7快速繪圖plot函數(shù)的調(diào)用方式很靈活,第一句將x,y數(shù)組傳遞給plot之后,用關(guān)鍵字參數(shù)指定各種屬性:?label:給所繪制的曲線一個名字,此名字在圖示(legend)中顯示。只要在字符串前后添加''$''符號,matplotlib就會使用其內(nèi)嵌的latex引擎繪制的數(shù)學(xué)公式。?color:指定曲線的顏色?linewidth:指定曲線的寬度第三個參數(shù)‘’b--``指定曲線的顏色和線型plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)plt.plot(x,z,"b--",label="$cos(x^2)$“)8快速繪圖接下來通過一系列函數(shù)設(shè)置繪圖對象的各個屬性:?xlabel/ylabel:設(shè)置X軸/Y軸的文字?title:設(shè)置圖表的標(biāo)題?ylim:設(shè)置Y軸的范圍?legend:顯示圖示最后調(diào)用plt.show()顯示出創(chuàng)建的所有繪圖對象。plt.xlabel("Time(s)")plt.ylabel("Volt")plt.title("PyPlotFirstExample")plt.ylim(-1.2,1.2)plt.legend()9快速繪圖

importnumpyasnpimportmatplotlib.pyplotasplt

x=np.linspace(0,10,1000)y=np.sin(x)z=np.cos(x**2)

plt.figure(figsize=(8,4))plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)plt.plot(x,z,"b--",label="$cos(x^2)$")plt.xlabel("Time(s)")plt.ylabel("Volt")plt.title("PyPlotFirstExample")plt.ylim(-1.2,1.2)plt.legend()plt.show()10快速繪圖圖11快速繪圖圖還可以調(diào)調(diào)用plt.savefig()將將當(dāng)前的的Figure對象保保存成圖圖像文件件,圖像格式式由圖像像文件的的擴(kuò)展名名決定。。下面的的程序?qū)?dāng)前的的圖表保保存為“test.png”,,并且通通過dpi參數(shù)數(shù)指定圖圖像的分分辨率為為120,,因此輸輸出圖像像的寬度度為“8X120=960”個個像素。。實(shí)際上不不需要調(diào)調(diào)用show()顯示示圖表,,可以直直接用savefig()將將圖表保保存成圖圖像文件件.使用這這種方法法可以很很容易編編寫出批批量輸輸出圖表表的程序序.runmatplotlib_simple_plot.pyplt.savefig("test.png",dpi=120)12快速繪圖圖繪制多軸軸圖一個繪圖圖對象(figure)可以包含含多個軸軸(axis),在Matplotlib中用軸表表示一個個繪圖區(qū)區(qū)域,可可以將其其理解為為子圖。。上面的的第一個個例子中中,繪圖圖對象只只包括一一個軸,,因此只只顯示了了一個軸軸(子圖(Axes))??梢允故褂胹ubplot函數(shù)快速速繪制有有多個軸軸的圖表表。subplot函數(shù)的調(diào)調(diào)用形式式如下::subplot(numRows,numCols,plotNum)13快速繪圖圖subplot將整個繪繪圖區(qū)域域等分為為numRows行和numCols列個子區(qū)區(qū)域,然然后按照照從左到到右,從從上到下下的順序序?qū)γ總€個子區(qū)域域進(jìn)行編編號,左左上的子子區(qū)域的的編號為為1。如果numRows,numCols和plotNum這三個數(shù)數(shù)都小于于10的話,可可以把它它們縮寫寫為一個個整數(shù),,例如subplot(323)和subplot(3,2,3)是相同的的。subplot在plotNum指定的區(qū)區(qū)域中創(chuàng)創(chuàng)建一個個軸對象象。如果果新創(chuàng)建建的軸和和之前創(chuàng)創(chuàng)建的軸軸重疊的的話,之之前的軸軸將被刪刪除。14快速繪圖圖下面的程程序創(chuàng)建建3行2列共6個軸,通通過axisbg參數(shù)給每每個軸設(shè)設(shè)置不同同的背景景顏色。。如果希望望某個軸軸占據(jù)整整個行或或者列的的話,可可以如下下調(diào)用subplot:foridx,colorinenumerate("rgbyck"):plt.subplot(320+idx+1,axisbg=color)plt.show()plt.subplot(221)#第一行的的左圖plt.subplot(222)#第一行的的右圖plt.subplot(212)#第二整行行plt.show()15快速繪圖圖當(dāng)繪圖對對象中有有多個軸軸的時候候,可以以通過工工具欄中中的ConfigureSubplots按鈕,交交互式地地調(diào)節(jié)軸軸之間的的間距和和軸與邊邊框之間間的距離離。如果果希望在在程序中中調(diào)節(jié)的的話,可可以調(diào)用用subplots_adjust函數(shù),它它有l(wèi)eft,right,bottom,top,wspace,hspace等幾個關(guān)關(guān)鍵字參參數(shù),這這些參數(shù)數(shù)的值都都是0到1之間的小小數(shù),它它們是以以繪圖區(qū)區(qū)域的寬寬高為1進(jìn)行正規(guī)規(guī)化之后后的坐標(biāo)標(biāo)或者長長度。16快速繪圖圖subplot()返返回它所所創(chuàng)建的的Axes對象象,可以以將它用用變量保保存起來來,然后后用sca()交替讓讓它們成成為當(dāng)前前Axes對象象,并調(diào)調(diào)用plot()在其其中繪圖圖。如果果需要同同時繪制制多幅圖圖表,可可以給figure()傳遞遞一個整整數(shù)參數(shù)數(shù)指定Figure對對象的序序號,如如果序號號所指定定的figure對象象已經(jīng)存存在,將將不創(chuàng)建建新的對對象,而而只是讓讓它成為為當(dāng)前的的Figure對象。。下面的的程序演演示了如如何依次次在不同同圖表的的不同子子圖中中繪制曲曲線。(matplotlib_multi_figure.py)17快速繪圖首先通過figure()創(chuàng)創(chuàng)建了兩個個圖表,它它們的序號號分別為1和2。然后在在圖表2中創(chuàng)建了了上下并并排的兩個個子圖,并并用變量ax1和ax2保存存。importnumpyasnpimportmatplotlib.pyplotaspltplt.figure(1)#創(chuàng)建圖表1plt.figure(2)#創(chuàng)建圖表2ax1=plt.subplot(211)#在圖表2中創(chuàng)建子圖圖1ax2=plt.subplot(212)#在圖表2中創(chuàng)建子圖圖2x=np.linspace(0,3,100)18快速繪圖在循環(huán)中,先先調(diào)用figure(1)讓圖表1成為當(dāng)前圖圖表,并在其其中繪圖。然然后調(diào)用sca(ax1)和sca(ax2)分別讓讓子圖ax1和ax2成成為當(dāng)前子圖圖,并在其中中繪圖。當(dāng)它它們成為當(dāng)前前子圖時,包包含它們的圖圖表2也自動成為為當(dāng)前圖表,,因此不需要要調(diào)用figure(2)依次次在圖表1和圖表2的的兩個子圖圖之間切換,,逐步在其中中添加新的曲曲線foriinxrange(5):plt.figure(1)#選擇圖表1plt.plot(x,np.exp(i*x/3))plt.sca(ax1)#選擇圖表2的子圖1plt.plot(x,np.sin(i*x))plt.sca(ax2)#選擇圖表2的子圖2plt.plot(x,np.cos(i*x))plt.show()19快速速繪繪圖圖20快速速繪繪圖圖坐標(biāo)標(biāo)軸軸設(shè)設(shè)定定Axis容容器器包包括括坐坐標(biāo)標(biāo)軸軸的的刻刻度度線線、、刻刻度度標(biāo)標(biāo)簽簽、、坐坐標(biāo)標(biāo)網(wǎng)網(wǎng)格格以以及及坐坐標(biāo)標(biāo)軸軸標(biāo)標(biāo)題題等等內(nèi)內(nèi)容容。??炭潭榷劝ɡㄖ髦骺炭潭榷群秃透备笨炭潭榷?,,分分別別通通過過get_major_ticks()和和get_minor_ticks()方方法法獲獲得得。。每每個個刻刻度度線線都都是是一一個個XTick或或YTick對對象象,,它它包包括括實(shí)實(shí)際際的的刻刻度度線線和和刻刻度度標(biāo)標(biāo)簽簽。。為為了了方方便便訪訪問問刻刻度度線線和和文文本本,,Axis對對象象提提供供了了get_ticklabels()和和get_ticklines()方方法法,可以直接獲獲得刻度標(biāo)簽簽和刻度線。。下面例子進(jìn)進(jìn)行繪圖并得得到當(dāng)前子圖圖的X軸對象象axis:>>>plt.plot([1,2,3],[4,5,6])>>>plt.show()>>>axis=plt.gca().xaxis21快速繪圖獲得axis對象的刻度位置列列表:下面獲得axis對象的的刻度標(biāo)簽以以及標(biāo)簽中的的文字:>>>axis.get_ticklocs()array([1.,1.5,2.,2.5,3.])>>>axis.get_ticklabels()#獲得刻度標(biāo)簽簽列表<alistof5Textmajorticklabelobjects>>>>[x.get_text()forxinaxis.get_ticklabels()]#獲得刻度的文文本字符串[u'1.0',u'1.5',u'2.0',u'2.5',u'3.0‘]22快速繪圖23快速繪繪圖下面獲獲得X軸上表示示主刻刻度線線的列列表,,可看看到X軸上上共有有10條刻刻度線線由于沒沒有副副刻度度線,,因此此副刻刻度線線列表表的長長度為為0:使用pyplot模模塊中的xticks()能能夠完成X軸上刻度度標(biāo)簽的配配置:>>>axis.get_ticklines()<alistof10Line2Dticklinesobjects>>>>axis.get_ticklines(minor=True)#獲得副刻度度線列表<alistof0Line2Dticklinesobjects>>>>plt.xticks(fontsize=16,color="red",rotation=45)24快速繪圖圖上面的例例子中副副刻度線線列表為為空,這這是因?yàn)闉橛糜谟嬘嬎愀笨炭潭任恢弥玫膶ο笙竽J(rèn)為為NullLocator,它不不產(chǎn)生任任何刻度度線。而而計算主主刻度位位置的對對象為AutoLocator,它它會根據(jù)據(jù)當(dāng)前的的縮放等等配置自自動計算算刻度的的位置.matplotlib提供了了多種配配置刻度度線位置置的Locator類類,以及及控制刻刻度標(biāo)簽簽顯示的的Formatter類。。下面的的程序設(shè)設(shè)置X軸的主主刻度為為π/4,副副刻度為為π/20,并且主主刻度上上的標(biāo)簽簽用數(shù)學(xué)學(xué)符號顯顯示π。(matplotlib_axis_text.py自定義義坐標(biāo)軸軸的刻度度和文字字)25快速繪圖圖與刻度定定位和文文本格式式化相關(guān)關(guān)的類都都在matplotlib.ticker模塊中中定義,,程序從從中載入入了兩個個類:MultipleLocaton,FuncFormatter.frommatplotlib.tickerimportMultipleLocator,FuncFormatterimportmatplotlib.pyplotasplfrommatplotlib.tickerimportMultipleLocator,FuncFormatterimportnumpyasnpx=np.arange(0,4*np.pi,0.01)y=np.sin(x)pl.figure(figsize=(8,4))pl.plot(x,y)ax=pl.gca()26快速繪圖圖程序中通通過pi_formatter()計算出刻刻度值對對應(yīng)的刻刻度文本本.(很繁瑣瑣)defpi_formatter(x,pos):m=np.round(x/(np.pi/4))n=4whilem!=0andm%2==0:m,n=m//2,n//2ifm==0:return"0"ifm==1andn==1:return"$\pi$"ifn==1:returnr"$%d\pi$"%mifm==1:returnr"$\frac{\pi}{%d}$"%nreturnr"$\frac{%d\pi}{%d}$"%(m,n)27快速繪圖圖>>>X=np.linspace(0,4*np.pi,17,endpoint=True)>>>Xarray([0.,0.78539816,1.57079633,2.35619449,3.14159265,3.92699082,4.71238898,5.49778714,6.28318531,7.06858347,7.85398163,8.6393798,9.42477796,10.21017612,10.99557429,11.78097245,12.56637061])>>>plt.xticks([0.,0.78539816,1.57079633,2.35619449,3.14159265,3.92699082,4.71238898,5.49778714,6.28318531,7.06858347,7.85398163,8.6393798,9.42477796,10.21017612,10.99557429,11.78097245,12.56637061],[r'$0$',r'$\pi/4$',r'$\pi/2$',r'$3\pi/4$',r'$\pi$',r'$5\pi/4$',r'$3\pi/2$',r'$7\pi/4$',r'$2\pi$',r'$9\pi/4$',r'$5\pi/2$',r'$11\pi/4$',r'$3\pi$',r'$13\pi/4$',r'$7\pi/2$',r'$15\pi/4$',r'$4\pi$'])#r'$\frac{2\pi}{3}$',28快速繪圖圖以指定值值的整數(shù)數(shù)倍為刻刻度放置置主、副副刻度線線。使用指定定的函數(shù)數(shù)計算刻刻度文本本,它會會將刻度度值和刻刻度的序序號作為為參數(shù)傳傳遞給計計算刻度度文本的的函數(shù).ax.xaxis.set_major_locator(MultipleLocator(np.pi/4))ax.xaxis.set_minor_locator(MultipleLocator(np.pi/20))ax.xaxis.set_major_formatter(FuncFormatter(pi_formatter))#設(shè)置兩個坐標(biāo)標(biāo)軸的范圍pl.ylim(-1.5,1.5)pl.xlim(0,np.max(x))29快速繪圖pl.subplots_adjust(bottom=0.15)#設(shè)置圖的底邊邊距pl.grid()#開啟網(wǎng)格#主刻度為pi/4ax.xaxis.set_major_locator(MultipleLocator(np.pi/4))#主刻度文本用用pi_formatter函數(shù)計算ax.xaxis.set_major_formatter(FuncFormatter(pi_formatter))#副刻度為pi/20ax.xaxis.set_minor_locator(MultipleLocator(np.pi/20))#設(shè)置刻度文本本的大小fortickinax.xaxis.get_major_ticks():tick.label1.set_fontsize(16)pl.show()30快速繪圖31繪圖函數(shù)簡介介對數(shù)坐標(biāo)圖前面介紹過如如何使用plot()繪繪制曲線圖,,所繪制圖表表的X-Y軸軸坐標(biāo)都是算算術(shù)坐標(biāo)。下下面看看如何何在對數(shù)坐標(biāo)標(biāo)系中繪圖。。繪制對數(shù)坐標(biāo)標(biāo)圖的函數(shù)有有三個:semilogx()、semilogy()和和loglog(),它它們分別繪制制X軸為對數(shù)坐坐標(biāo)、Y軸為對數(shù)坐坐標(biāo)以及兩個個軸都為對數(shù)數(shù)坐標(biāo)時的圖圖表。32繪圖函數(shù)簡介介下面的程序使使用4種不同的坐坐標(biāo)系繪制低低通濾波器的的頻率響應(yīng)曲曲線。其中中,左上圖為為plot()繪制的算術(shù)術(shù)坐標(biāo)系,右右上圖為semilogx()繪制制的X軸對數(shù)坐標(biāo)標(biāo)系,左下圖圖為semilogy()繪繪制的Y軸對對數(shù)坐標(biāo)系,,右下圖為loglog()繪制的的雙對數(shù)坐標(biāo)標(biāo)系。使用雙雙對數(shù)坐標(biāo)系系表示的頻率率響應(yīng)曲線通通常被稱為波波特圖。(matplotlib_log.py)importnumpyasnpimportmatplotlib.pyplotaspltw=np.linspace(0.1,1000,1000)p=np.abs(1/(1+0.1j*w))#計算算低低通通濾濾波波器器的的頻頻率率響響應(yīng)應(yīng)33繪圖圖函函數(shù)數(shù)簡簡介介plt.subplot(221)plt.plot(w,p,linewidth=2)plt.ylim(0,1.5)plt.subplot(222)plt.semilogx(w,p,linewidth=2)plt.ylim(0,1.5)plt.subplot(223)plt.semilogy(w,p,linewidth=2)plt.ylim(0,1.5)plt.subplot(224)plt.loglog(w,p,linewidth=2)plt.ylim(0,1.5)plt.show()34繪圖圖函函數(shù)數(shù)簡簡介介35繪圖圖函函數(shù)數(shù)簡簡介介極坐坐標(biāo)標(biāo)圖圖極坐坐標(biāo)標(biāo)系系是是和和笛笛卡卡爾爾(X-Y)坐坐標(biāo)標(biāo)系系完完全全不不同同的的坐坐標(biāo)標(biāo)系系,,極極坐坐標(biāo)標(biāo)系系中中的的點(diǎn)點(diǎn)由由一一個個夾夾角角和和一一段段相相對對中中心心點(diǎn)點(diǎn)的的距距離離來來表表示示。。下下面面的的程程序序繪繪制制極極坐坐標(biāo)標(biāo)圖圖,,(matplotlib_polar.py)。。importnumpyasnpimportmatplotlib.pyplotasplttheta=np.arange(0,2*np.pi,0.02)36繪圖圖函函數(shù)數(shù)簡簡介介程序序中中調(diào)調(diào)用用subplot()創(chuàng)創(chuàng)建建子子圖圖時時通通過過設(shè)設(shè)polar參參數(shù)數(shù)為為True,創(chuàng)創(chuàng)建建一一個個極極坐坐標(biāo)標(biāo)子子圖圖。。然然后后調(diào)調(diào)用用plot()在在極極坐坐標(biāo)標(biāo)子圖中中繪圖圖。也也可以以使用用polar()直接創(chuàng)創(chuàng)建極極坐標(biāo)標(biāo)子圖圖并在在其中中繪制制曲線線。plt.subplot(121,polar=True)plt.plot(theta,1.6*np.ones_like(theta),linewidth=2)plt.plot(3*theta,theta/3,"--",linewidth=2)37繪圖函函數(shù)簡簡介rgrids()設(shè)置同同心圓圓柵格格的半半徑大大小和和文字字標(biāo)注注的角角度。。因此此右圖圖中的的虛線線圓圈圈有三三個,,半半徑分分別為為0.5、1.0和和1.5,這這些文文字沿沿著45°°線排排列。。Thetagrids()設(shè)置放射射線柵格格的角度度,因因此右圖圖中只有有兩條放放射線,,角度分分別為0°和45°。。plt.subplot(122,polar=True)plt.plot(theta,1.4*np.cos(5*theta),"--",linewidth=2)plt.plot(theta,1.8*np.cos(4*theta),linewidth=2)plt.rgrids(np.arange(0.5,2,0.5),angle=45)plt.thetagrids([0,45])plt.show()38繪圖函數(shù)數(shù)簡介39繪圖函數(shù)數(shù)簡介柱狀圖柱狀圖用用其每根根柱子的的長度表表示值的的大小,它它們通常常用來比比較兩組組或多組組值。下下面的程程序從文文件中讀讀入中國國人口的的年齡分分布數(shù)據(jù)據(jù),并使用用柱狀圖圖比較男男性和女女性的年年齡分布布。(matplotlib_bar.py繪制比較男男女人口的的年齡分布布圖)importnumpyasnpimportmatplotlib.pyplotasplt40繪圖函數(shù)簡簡介讀入的數(shù)據(jù)據(jù)中,第0列為年齡齡,它將作作為柱狀圖圖的橫坐標(biāo)標(biāo)。首先計計算柱狀圖圖中每根柱柱子的寬寬度,因?yàn)闉橐诿總€個年齡段上上繪制兩根根柱子,因因此柱子的的寬度應(yīng)該該小于年齡齡段的二分分之一。。這里以年年齡段的0.4倍作作為柱子的的寬度。data=np.loadtxt("china_population.txt")width=(data[1,0]-data[0,0])*0.441繪圖函數(shù)簡簡介調(diào)用bar()繪制制男性人口口分布的柱柱狀圖。它它的第一個個參數(shù)為每每根柱子左左邊緣的橫橫坐標(biāo),為為了讓男男性和女性性的柱子以以年齡刻度度為中心,,這里讓每每根柱子左左側(cè)的橫坐坐標(biāo)為“年年齡減去柱柱子的寬度度”。Bar()的的第二個參參數(shù)為每根根柱子的高高度,第三三個參數(shù)指指定所有柱柱子的寬度度。當(dāng)?shù)谌齻€參數(shù)為為序列時,,可以為每每根柱子指指定寬度。。plt.figure(figsize=(8,5))plt.bar(data[:,0]-width,data[:,1]/1e7,width,color="b",label=u"男")42繪圖函數(shù)簡簡介繪制女性人人口分布的的柱狀圖,,這里以年年齡為柱子子的左邊緣緣橫坐標(biāo),,因此女性性和男性的的人口分分布圖以年年齡刻度為為中心。由由于bar()不自自動修改顏顏色,因此此程序中通通過color參數(shù)數(shù)設(shè)置兩個個柱狀圖圖的顏色。。plt.bar(data[:,0],data[:,2]/1e7,width,color="r",label=u"女")plt.xlim(-width,100)plt.xlabel(u"年齡")plt.ylabel(u"人口(千萬萬)")plt.legend()plt.show()43繪圖函數(shù)簡簡介44繪圖函數(shù)簡簡介散列圖使用plot()繪繪圖時,如如果指定樣樣式參數(shù)為為僅繪制數(shù)數(shù)據(jù)點(diǎn),那那么所繪制制的就是一一幅散列圖圖。例如如:但是這種方方法所繪制制的點(diǎn)無法法單獨(dú)指定定顏色和大大小。而scatter()所繪制的的散列圖卻卻可以指定定每個點(diǎn)的的顏色和大大小。下面面的程序演演示scatter()的用用法(matplotlib_scatter.py).>>>plt.plot(np.random.random(100),np.random.random(100),"o")45繪圖函數(shù)簡簡介scatter()的前兩個個參數(shù)是數(shù)數(shù)組,分別別指定每個個點(diǎn)的X軸和Y軸的坐標(biāo)標(biāo)。s參數(shù)數(shù)指定點(diǎn)的的大小,,值和點(diǎn)的的面積成正正比。它可可以是一個個數(shù),importnumpyasnpimportmatplotlib.pyplotaspltplt.figure(figsize=(8,4))x=np.random.random(100)y=np.random.random(100)plt.scatter(x,y,s=x*1000,c=y,marker=(5,1),alpha=0.8,lw=2,facecolors="none")plt.xlim(0,1)plt.ylim(0,1)plt.show()46繪圖函數(shù)簡簡介指定所有點(diǎn)點(diǎn)的大??;;也可以是是數(shù)組,分分別對每個個點(diǎn)指定大大小。c參數(shù)指定定每個點(diǎn)的的顏色,可可以是數(shù)值值或數(shù)組。。這里使用用一維數(shù)組組為每個點(diǎn)點(diǎn)指定了一一個數(shù)值。。通過顏色色映射表,,每個數(shù)值值都會與一一個顏色相相對應(yīng)。默默認(rèn)的顏色色映射表中中藍(lán)色與最最小值對應(yīng)應(yīng),紅色與與最大值對應(yīng)。。當(dāng)c參數(shù)是形形狀為(N,3)或或(N,4)的二維維數(shù)組時,,則直接表表示每個點(diǎn)點(diǎn)的RGB顏色。marker參數(shù)設(shè)置點(diǎn)的形形狀,可以以是個表示示形狀的字字符串,也也可以是表表示多邊形形的兩個元元素的元組組,第一個個元素表示示多邊形的的邊數(shù),47繪圖函數(shù)簡簡介第二個元素素表示多邊邊形的樣式式,取值范范圍為0、1、2、3。0表示多邊邊形,1表表示星形,,2表示放放射形,3表示忽略略邊數(shù)而顯顯示為圓形形。最后,通過過alpha參數(shù)設(shè)設(shè)置點(diǎn)的透透明度,通通過lw參參數(shù)設(shè)置線線寬,lw是linewidth的的縮寫。facecolors參數(shù)數(shù)為“none””時,表示示散列點(diǎn)沒沒有填充色色。48繪圖函數(shù)簡簡介49繪圖函數(shù)簡簡介圖像imread()和和imshow()提供了簡簡單的圖像像載入和顯顯示功能.imread()可以從圖像像文件讀入入數(shù)據(jù),得得到一個表表示圖像的的NumPy數(shù)組組。它的的第一個個參數(shù)是是文件名名或文件件對象,,format參數(shù)指指定圖像像類型,,如果省省略,就就由文件件的擴(kuò)展展名決定定圖像類類型。對對于灰灰度圖像像,它返返回一個個形狀為為(M,,N)的的數(shù)組;;對于彩彩色圖像像,返冋冋形狀為為(M,N,C)的數(shù)組組。其其中,M為圖像像的高度,N為圖圖像的寬寬度,C為3或4,表示圖圖像的通通道數(shù)。。>>>img=plt.imread(“l(fā)ena.jpg“)50繪圖函數(shù)數(shù)簡介下面的程程序從““l(fā)ena.jpg”中讀讀入圖像像數(shù)據(jù),,得到的的數(shù)組img是是一個形形狀為(393,512,3)的單單字節(jié)無無符號整整數(shù)數(shù)組組。這是是因?yàn)橥ㄍǔJ褂糜玫膱D像像都是采采用單字字節(jié)分別別保存每每個像素素的紅、、綠、藍(lán)藍(lán)三個通通道的分分量:>>>img=plt.imread("lena.jpg")>>>img.shape(393L,512L,3L)>>>img.dtypedtype('uint8')51繪圖函數(shù)數(shù)簡介imshow()可以以用來顯顯示imread()返回的數(shù)組組。如果果數(shù)組是是表示多多通道圖圖像的三三維數(shù)組組,那么么每個像像素的顏顏色由各各個通道道的值決決定:請注意,,從JPG圖圖像中讀讀入的數(shù)數(shù)據(jù)是上上下顛倒倒的,為了正常常顯示圖圖像,可可以將數(shù)數(shù)組的第第0軸反轉(zhuǎn)轉(zhuǎn),或者者設(shè)置imshow()的origin參參數(shù)為“l(fā)ower”,從而讓讓所顯示示圖表的的原點(diǎn)在在左下角角:>>>plt.imshow(img)#注意圖像像是上下下顛倒的的>>>plt.imshow(img[::-1])#反轉(zhuǎn)圖像像數(shù)組的的第0軸#or>>>plt.imshow(img,origin="lower")#讓圖表的的原點(diǎn)在在左下角角52繪圖函數(shù)數(shù)簡介如果三維維數(shù)組的的元素類類型為浮浮點(diǎn)數(shù),,那么元元素的取取值范圍圍為0.0到1.0,與顏色色值0到255對對應(yīng)。超超出這個個范圍可可能會出出現(xiàn)顏色色異常的的像素。。下面的的例子將將數(shù)組img轉(zhuǎn)轉(zhuǎn)換為浮浮點(diǎn)數(shù)組組并用imshow()進(jìn)進(jìn)行顯示示:>>>img=img[::-1]>>>plt.imshow(img*1.0)#取值值范范圍圍為為0.0到255.0的浮點(diǎn)數(shù)數(shù)組,不不能正確確顯示顏顏色>>>plt.imshow(img/255.0)#取值范圍圍為0.0到1.0的浮點(diǎn)數(shù)數(shù)組,能能正確顯顯示顏色色>>>plt.imshow(np.clip(img/200.0,0,1))#使用clip()限制取值值范圍,,整個圖圖像變亮亮53繪圖函數(shù)數(shù)簡介如果imshow()的參數(shù)數(shù)是二維維數(shù)組,,就使用用顏色映映射表決決定每個個像素的的顏色。。下面顯顯示圖像像中的紅紅色通道道:顯示效果果比較嚇嚇人,因因?yàn)槟J(rèn)認(rèn)的圖像像映射將將最小值值映射為為藍(lán)色、、將最大大值映射射為紅色色.可以使用用colorbar()將顏色色映射表表在圖表表中顯示示出來::>>>plt.imshow(img[:,:,0])>>>plt.colorbar()54繪圖函數(shù)數(shù)簡介通過imshow()的cmap參參數(shù)可以以修改顯顯示圖像像時所采采用的顏顏色映射射表。顏顏色映射射表是一一個ColorMap對象象,matplotlib中中已經(jīng)預(yù)預(yù)先定義義好了很很多顏色色映射表表,可通通過下面面的語句句找到這這些顏顏色映射射表的名名字:(matplotlib_imshow.py)下面使用用名為copper的的顏色映映射表顯顯示圖像像的紅色色通道,,很有老老照片的的味道:>>>importmatplotlib.cmascm>>>cm._cmapnames[‘Spectral’,’’copper’,‘‘RdYlGn',‘Set2’,’’sumner’’,’’spring’,’gist_ncar’’,…]>>>plt.imshow(img[:,:,0],cmap=cm.copper)55繪圖函數(shù)簡簡介importnumpyasnpimportmatplotlib.pyplotaspltimportmatplotlib.cmascmplt.subplots_adjust(0,0,1,1,0.05,0.05)plt.subplot(331)img=plt.imread("lena.jpg")plt.imshow(img)plt.subplot(332)plt.imshow(img[::-1])plt.subplot(333)plt.imshow(img,origin="lower")img=img[::-1]plt.subplot(334)plt.imshow(img*1.0)56繪圖函數(shù)簡簡介plt.subplot(335)plt.imshow(img/255.0)plt.subplot(336)plt.imshow(np.clip(img/200.0,0,1))plt.subplot(325)plt.imshow(img[:,:,0])plt.colorbar()plt.subplot(326)plt.imshow(img[:,:,0],cmap=cm.copper)plt.colorbar()foraxinplt.gcf().axes:ax.set_axis_off()ax.set_axis_off()plt.show()57繪圖函數(shù)簡簡介58繪圖函數(shù)簡簡介還可以使用用imshow()顯示任意意的二維數(shù)數(shù)據(jù),例如如下面的程程序使用圖圖像直觀地地顯示了二二元函數(shù).(matplotlib_2dfunc.py使使用imshow()可視化化二元函數(shù)數(shù))importnumpyasnpimportmatplotlib.pyplotaspltimportmatplotlib.cmascmy,x=np.ogrid[-2:2:200j,-2:2:200j]z=x*np.exp(-x**2-y**2)extent=[np.min(x),np.max(x),np.min(y),np.max(y)]59繪圖函數(shù)簡介介首先通過數(shù)組組的廣播功能能計算出表示示函數(shù)值的二二維數(shù)組Z,注意它的第第0軸表示Y軸、第1軸表示X軸軸。然后將X、Y軸的取值范范圍保存到extent列表中。plt.figure(figsize=(10,3))plt.subplot(121)plt.imshow(z,extent=extent,origin="lower")plt.colorbar()plt.subplot(122)plt.imshow(z,extent=extent,cmap=cm.gray,origin="lower")plt.colorbar()plt.show()60繪圖函數(shù)簡介介將extent列表傳遞遞給imshow()的extent參數(shù),,這樣一來,,圖表的X、Y軸的刻度標(biāo)標(biāo)簽將使用extent列表所指定定的范圍.61繪圖函數(shù)簡介介等值線圖還可以使用等等值線圖表示示二元函數(shù)。。所謂等值線線,是指由函函數(shù)值相等的的各點(diǎn)連成的的平滑曲線。。等值線可以以直觀地表示示二元函數(shù)值值的變化趨勢勢,例如等值值線密集的地地方表示函數(shù)數(shù)值在此處的的變化較大。。matplotlib中可以使用用contour()和和contourf()描繪等值線線,它們的區(qū)區(qū)別是:contourf()所得得到的是帶填填充效果的等等值線。(matplotlib_contour.py用contour和contourf描繪等等值線圖)62繪圖函數(shù)簡介介importnumpyasnpimportmatplotlib.pyplotasplty,x=np.ogrid[-2:2:200j,-3:3:300j]z=x*np.exp(-x**2-y**2)extent=[np.min(x),np.max(x),np.min(y),np.max(y)]plt.figure(figsize=(10,4))plt.subplot(121)cs=plt.contour(z,10,extent=extent)plt.clabel(cs)plt.subplot(122)plt.contourf(x.reshape(-1),y.reshape(-1),z,20)plt.show()63繪圖函數(shù)簡介介為了更淸楚地地區(qū)分X軸和Y軸,這里讓讓它們的取值值范圍和等分分次數(shù)均不相相同.這樣得得到的數(shù)組組z的形狀為為(200,300),它的第0軸對應(yīng)Y軸、第1軸對應(yīng)X軸軸。調(diào)用contour()繪制數(shù)組z的等值線圖圖,第二個參參數(shù)為10,表示將將整個函數(shù)的的取值范圍等等分為10個區(qū)間,即顯示的等等值線圖中將將有9條等值線。。和imshow()一樣,可以使使用extent參數(shù)指定定等值線圖的的X軸和Y軸的數(shù)據(jù)范范圍。contour()所返回的的是一個QuadContourSet對象,,將它傳遞遞給clabel(),為其中的等等值線標(biāo)上對對應(yīng)的值。64繪圖函數(shù)簡介介調(diào)用contourf(),繪制將將取值范圍等等分為20份、帶填填充效果的等等值線圖。這這里演示了了另外一種設(shè)設(shè)置X、Y軸取值范圍圍的方法。它它的前兩個參參數(shù)分別是計計算數(shù)組z時時所使用的X軸和Y軸上的取樣樣點(diǎn),這兩個個數(shù)組必須是是一維的。65繪圖函數(shù)簡介介還可以使用等等值線繪制隱隱函數(shù)曲線.顯然,無無法像繪制一一般函數(shù)那樣樣,先創(chuàng)建一一個等差數(shù)組組表示變量的取值點(diǎn),,然后計算出出數(shù)組中每個個x所對應(yīng)的y值??梢允故褂玫戎稻€解解決這個問題題,顯然隱函函數(shù)的曲線就就是值等于0的那條等值值線。下面的的程序繪制函函數(shù)在f(x,y)=0和f(x,y)-0.1=0時的曲曲線.(matplotlib_implicit_func.py)importnumpyasnpimportmatplotlib.pyplotasplty,x=np.ogrid[-1.5:1.5:200j,-1.5:1.5:200j]f=(x**2+y**2)**4-(x**2-y**2)**266繪圖圖函函數(shù)數(shù)簡簡介介plt.figure(figsize=(9,4))plt.subplot(121)extent=[np.min(x),np.max(x),np.min(y),np.max(y)]cs=plt.contour(f,extent=extent,levels=[0,0.1],colors=["b","r"],linestyles=["solid","dashed"],linewidths=[2,2])plt.subplot(122)forcincs.collections:data=c.get_paths()[0].verticesplt.plot(data[:,0],data[:,1],color=c.get_color()[0],linewidth=c.get_linewidth()[0])plt.show()67繪圖圖函函數(shù)數(shù)簡簡介介68繪圖函數(shù)數(shù)簡介在調(diào)用contour()繪繪制等值值線時,,可以通通過levels參數(shù)數(shù)指定所所繪制等等值線對對應(yīng)的函函數(shù)值,,這里里設(shè)置levels參參數(shù)為[0,0.1],因此此最終將將繪制兩兩條等值值線。觀察圖會發(fā)現(xiàn),,表示隱隱函數(shù)f(x)=0藍(lán)藍(lán)色實(shí)線線并不是是完全連連續(xù)的,,在圖的的中間部部分它由由許多孤孤立的小小段構(gòu)成成。因?yàn)闉榈戎稻€線在原點(diǎn)點(diǎn)附近無無限靠近近,因此此無論對對函數(shù)f的取值值空間如如何進(jìn)行行細(xì)分,,總是會會有無法法分開的的地方,,最終造成成了圖中中的那些些孤立的的細(xì)小區(qū)區(qū)域。而而表示隱隱函數(shù)f(x,y)-0.1=0的的紅色虛虛線則是是閉合且且連續(xù)的的。69繪圖函數(shù)數(shù)簡介可以通過過contour()返回的的對象獲獲得等值值線上每每點(diǎn)的數(shù)數(shù)據(jù),下下面在IPython中觀察察變量cs,它它是一個個QuadContourSet對象象:cs對象象的collections屬性是是一個等等值線列列表,每每條等值值線用一一個LineCollection對象表表示:>>>cs.collections<alistof2mcoll.LineCollectionobjects>>>>runmatplotlib_implicit_func.py>>>cs<matplotllb.contour.QuadContourSetinstanceat0x0A348E90>70繪圖函函數(shù)簡簡介每個LineCollection對對象都都有它它自己己的顏顏色、、線型型、線線寬等等屬性性,注注意這這些屬屬性所所獲得得的結(jié)結(jié)果外外面還還有一一層封封裝,,要獲獲得其其第0個元元素才才是真真正的的配置置:由類名名可知知,LineCollection對對象是是一組組曲線線的集集合,,因此此它可可以表表示像像藍(lán)色色實(shí)線線那樣樣由多多條線線構(gòu)成成的等等值線線。它它的get_paths()方法法獲得得構(gòu)成成等值值線的的所有有路徑徑,本本例中中藍(lán)色色實(shí)線線>>>c.get_color()[0]array([1.,0.,0.,1.])>>>c.get_linewidth()[0]271繪圖函函數(shù)簡簡介所表示示的等等值線線由42條條路徑徑構(gòu)成成:路徑是是一個個Path對象象,通通過它它的vertices屬屬性可可以獲獲得路路徑上上所有有點(diǎn)的的坐標(biāo)標(biāo):>>>len(cs.collections[0].get_paths())42>>>path=cs.collections[0].get_paths()[0]>>>type(path)<class'matplotlib.path.Path>>>>path.verticesarray([[-0.08291457,-0.98938936],[-0.09039269,-0.98743719],…,[-0.08291457,-0.98938936]])72繪圖函函數(shù)簡簡介下面的的程序序從等等值線線集合合cs中找找到表表示等等值線線的路路徑,,并使使用plot()將將其繪繪制出出來.plt.subplot(122)forcincs.collections:data=c.get_paths()[0].verticesplt.plot(data[:,0],data[:,1],color=c.get_color

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論