版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quá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ù),方便用戶快速進行計算和繪圖,可以用于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)前的繪圖對象中進行繪圖: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)用plt.savefig()將當(dāng)前前的Figure對象保保存成圖像文文件,圖像格式由圖圖像文件的擴擴展名決定。。下面的程序序?qū)?dāng)前的圖圖表保存為“test.png”,并并且通過dpi參數(shù)指定定圖像的分辨辨率為120,因此此輸出圖像的的寬度為“8X120=960”個像素。。實際上不需要要調(diào)用show()顯示示圖表,可以以直接用savefig()將圖表表保存成圖像像文件.使用這種方方法可以很容容易編寫出批批量輸出圖圖表的程序.runmatplotlib_simple_plot.pyplt.savefig("test.png",dpi=120)12快速繪圖繪制多軸圖一個繪圖對象象(figure)可以包含多個個軸(axis),在Matplotlib中用軸表示一一個繪圖區(qū)域域,可以將其其理解為子圖圖。上面的第第一個例子中中,繪圖對象象只包括一個個軸,因此只只顯示了一個個軸(子圖(Axes))。可以使用subplot函數(shù)快速繪制制有多個軸的的圖表。subplot函數(shù)的調(diào)用形形式如下:subplot(numRows,numCols,plotNum)13快速繪圖subplot將整個繪圖區(qū)區(qū)域等分為numRows行和numCols列個子區(qū)域,,然后按照從從左到右,從從上到下的順順序?qū)γ總€子子區(qū)域進行編編號,左上的的子區(qū)域的編編號為1。如果numRows,numCols和plotNum這三個數(shù)都小小于10的話,可以把把它們縮寫為為一個整數(shù),,例如subplot(323)和subplot(3,2,3)是相同的。subplot在plotNum指定的區(qū)域中中創(chuàng)建一個軸軸對象。如果果新創(chuàng)建的軸軸和之前創(chuàng)建建的軸重疊的的話,之前的的軸將被刪除除。14快速繪圖下面的程序創(chuàng)創(chuàng)建3行2列共6個軸,通過axisbg參數(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é)節(jié)的話,可以以調(diào)用subplots_adjust函數(shù),它有l(wèi)eft,right,bottom,top,wspace,hspace等幾個關(guān)鍵字字參數(shù),這些些參數(shù)的值都都是0到1之間的小數(shù),,它們是以繪繪圖區(qū)域的寬寬高為1進行正規(guī)化之之后的坐標(biāo)或或者長度。16快速繪圖subplot()返回回它所創(chuàng)建的的Axes對對象,可以將將它用變量保保存起來,然然后用sca()交替讓讓它們成為當(dāng)當(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)建了兩兩個圖表,它它們的序號分分別為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)軸設(shè)定Axis容器器包括坐標(biāo)軸軸的刻度線、、刻度標(biāo)簽、、坐標(biāo)網(wǎng)格以以及坐標(biāo)軸標(biāo)標(biāo)題等內(nèi)容。??潭劝ㄖ髦骺潭群透笨炭潭?,分別通通過get_major_ticks()和get_minor_ticks()方法獲得得。每個刻度度線都是一個個XTick或YTick對象,,它包括實際際的刻度線和和刻度標(biāo)簽。。為了方便訪訪問刻度線和和文本,Axis對象象提供了get_ticklabels()和get_ticklines()方法,可以直接獲獲得刻度標(biāo)簽簽和刻度線。。下面例子進進行繪圖并得得到當(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)標(biāo)簽的配置::>>>axis.get_ticklines()<alistof10Line2Dticklinesobjects>>>>axis.get_ticklines(minor=True)#獲得副刻度線線列表<alistof0Line2Dticklinesobjects>>>>plt.xticks(fontsize=16,color="red",rotation=45)24快速繪圖上面的例子中中副刻度線列列表為空,這這是因為用于于計算副刻度度位置的對象象默認(rèn)為NullLocator,它不產(chǎn)生生任何刻度線線。而計算主主刻度位置的的對象為AutoLocator,它會根據(jù)當(dāng)當(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)的類都都在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ù).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)33繪圖函數(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ù)簡介介35繪圖函數(shù)簡介介極坐標(biāo)圖極坐標(biāo)系是和和笛卡爾(X-Y)坐坐標(biāo)系完全不不同的坐標(biāo)系系,極坐標(biāo)系系中的點由一一個夾角和一一段相對中心心點的距離來來表示。下面面的程序繪制制極坐標(biāo)圖,,(matplotlib_polar.py)。importnumpyasnpimportmatplotlib.pyplotasplttheta=np.arange(0,2*np.pi,0.02)36繪圖函數(shù)簡介介程序中調(diào)用subplot()創(chuàng)建建子圖時通過過設(shè)polar參參數(shù)為True,創(chuàng)建一一個極坐標(biāo)子子圖。然后調(diào)調(diào)用plot()在極坐坐標(biāo)子圖中繪圖。。也可以使用用polar()直接創(chuàng)建極坐坐標(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)標(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ù)簡介介39繪圖函數(shù)簡介介柱狀圖柱狀圖用其每每根柱子的長長度表示值的的大小,它們通通常用來比較較兩組或多組組值。下面的的程序從文件件中讀入中國國人口的年齡齡分布數(shù)據(jù),并使用柱狀狀圖比較男性性和女性的年年齡分布。(matplotlib_bar.py繪制比較男女女人口的年齡齡分布圖)importnumpyasnpimportmatplotlib.pyplotasplt40繪圖函數(shù)簡介介讀入的數(shù)據(jù)中中,第0列為年齡,,它將作為柱柱狀圖的橫坐坐標(biāo)。首先計計算柱狀圖中中每根柱子的的寬度,因因為要在每個個年齡段上繪繪制兩根柱子子,因此柱子子的寬度應(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ù)據(jù)據(jù)點,那么所所繪制的就是是一幅散列圖圖。例如::但是這種方法法所繪制的點點無法單獨指指定顏色和大大小。而scatter()所繪制制的散列圖卻卻可以指定每每個點的顏色色和大小。下下面的程序演演示scatter()的用法(matplotlib_scatter.py).>>>plt.plot(np.random.random(100),np.random.random(100),"o")45繪圖函數(shù)簡介介scatter()的前前兩個參數(shù)是是數(shù)組,分別別指定每個點點的X軸和Y軸的坐標(biāo)。。s參數(shù)指定定點的大小小,值和點的的面積成正比比。它可以是是一個數(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ù)簡介介指定所有點的的大??;也可可以是數(shù)組,,分別對每個個點指定大小小。c參數(shù)指定每每個點的顏色色,可以是數(shù)數(shù)值或數(shù)組。。這里使用一一維數(shù)組為每每個點指定了了一個數(shù)值。。通過顏色映映射表,每個個數(shù)值都會與與一個顏色相相對應(yīng)。默認(rèn)認(rèn)的顏色映射射表中藍色與與最小值對應(yīng)應(yīng),紅色與最最大值對應(yīng)。當(dāng)當(dāng)c參數(shù)是形狀狀為(N,3)或(N,4)的二維維數(shù)組時,則則直接表示每每個點的RGB顏色。marker參數(shù)設(shè)置點的形狀狀,可以是個個表示形狀的的字符串,也也可以是表示示多邊形的兩兩個元素的元元組,第一個個元素表示多多邊形的邊數(shù)數(shù),47繪圖函數(shù)簡介介第二個元素表表示多邊形的的樣式,取值值范圍為0、1、2、、3。0表示示多邊形,1表示星形,,2表示放射射形,3表示示忽略邊數(shù)而而顯示為圓形形。最后,通過alpha參參數(shù)設(shè)置點的的透明度,通通過lw參數(shù)數(shù)設(shè)置線寬,,lw是linewidth的縮縮寫。facecolors參數(shù)數(shù)為“none”時時,表示散列列點沒有填充充色。48繪圖函數(shù)簡介介49繪圖函數(shù)簡介介圖像imread()和imshow()提供了簡簡單的圖像載載入和顯示功功能.imread()可以從圖像文文件讀入數(shù)據(jù)據(jù),得到一個個表示圖像的的NumPy數(shù)數(shù)組。它的第第一個參數(shù)是是文件名或文文件對象,format參數(shù)指定圖圖像類型,如如果省略,就就由文件的擴擴展名決定圖圖像類型。對對于灰度圖圖像,它返回回一個形狀為為(M,N)的數(shù)組;對對于彩色圖像像,返冋形狀狀為(M,N,C)的數(shù)數(shù)組。其中中,M為圖像的高度,N為圖像的的寬度,C為為3或4,表示示圖像的通道道數(shù)。>>>img=plt.imread(““l(fā)ena.jpg“)50繪圖函數(shù)簡介介下面的程序從從“l(fā)ena.jpg”中讀入圖圖像數(shù)據(jù),得得到的數(shù)組img是一個個形狀為(393,512,3)的單字節(jié)節(jié)無符號整數(shù)數(shù)數(shù)組。這是是因為通常使使用的圖像都都是采用單字字節(jié)分別保存存每個像素的的紅、綠、藍藍三個通道的的分量:>>>img=plt.imread("lena.jpg")>>>img.shape(393L,512L,3L)>>>img.dtypedtype('uint8')51繪圖函數(shù)簡介介imshow()可以用用來顯示imread()返回的數(shù)組。如如果數(shù)組是表表示多通道圖圖像的三維數(shù)數(shù)組,那么每每個像素的顏顏色由各個通通道的值決定定:請注意,從JPG圖像中中讀入的數(shù)據(jù)據(jù)是上下顛倒倒的,為了正常顯示示圖像,可以以將數(shù)組的第第0軸反轉(zhuǎn),或或者設(shè)置imshow()的origin參數(shù)數(shù)為“l(fā)ower””,從而讓所所顯示圖表的的原點在左下下角:>>>plt.imshow(img)#注意圖像是上上下顛倒的>>>plt.imshow(img[::-1])#反轉(zhuǎn)圖像數(shù)組組的第0軸#or>>>plt.imshow(img,origin="lower")#讓圖表的原點點在左下角52繪圖函數(shù)簡介介如果三維數(shù)組組的元素類型型為浮點數(shù),,那么元素的的取值范圍為為0.0到1.0,與顏顏色值0到255對對應(yīng)。超出出這個范圍可可能會出現(xiàn)顏顏色異常的像像素。下面的的例子將數(shù)組組img轉(zhuǎn)換為為浮點數(shù)組并并用imshow()進行顯示::>>>img=img[::-1]>>>plt.imshow(img*1.0)#取值范圍為0.0到255.0的浮點數(shù)組,,不能正確顯顯示顏色>>>plt.imshow(img/255.0)#取值范圍為0.0到1.0的浮點數(shù)組,,能正確顯示示顏色>>>plt.imshow(np.clip(img/200.0,0,1))#使用clip()限制取值范圍圍,整個圖像像變亮53繪圖函數(shù)簡介介如果imshow()的的參數(shù)是二維維數(shù)組,就使使用顏色映射射表決定每個個像素的顏色色。下面顯示示圖像中的紅紅色通道:顯示效果比較較嚇人,因為為默認(rèn)的圖像像映射將最小小值映射為藍藍色、將最大大值映射為紅紅色.可以使用colorbar()將將顏色映射表表在圖表中顯顯示出來:>>>plt.imshow(img[:,:,0])>>>plt.colorbar()54繪圖函數(shù)簡介介通過imshow()的的cmap參參數(shù)可以修改改顯示圖像時時所采用的顏顏色映射表。。顏色映射表表是一個ColorMap對象,,matplotlib中已經(jīng)預(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ù)值值的二二維數(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)簽簽將使使用extent列列表所所指定定的范范圍.61繪圖函函數(shù)簡簡介等值線線圖還可以以使用用等值值線圖圖表示示二元元函數(shù)數(shù)。所所謂等等值線線,是是指由由函數(shù)數(shù)值相相等的的各點點連成成的平平滑曲曲線。。等值值線可可以直直觀地地表示示二元元函數(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ū)區(qū)分X軸和和Y軸,,這里里讓它它們的的取值值范圍圍和等等分次次數(shù)均均不相相同.這樣樣得到到的的數(shù)組組z的的形狀狀為(200,300),它的的第0軸對對應(yīng)Y軸、、第1軸對對應(yīng)X軸。。調(diào)用contour()繪制制數(shù)組組z的的等值值線圖圖,第第二個個參數(shù)數(shù)為10,表示示將整整個函函數(shù)的的取值值范圍圍等分分為為10個區(qū)間,即顯顯示的的等值值線圖圖中將將有9條等值值線。和和imshow()一樣,可可以使用用extent參參數(shù)指指定等值值線圖的的X軸和Y軸的數(shù)數(shù)據(jù)范圍圍。contour()所返返回的是是一個QuadContourSet對象象,將將它傳遞遞給clabel(),為其其中的等等值線標(biāo)標(biāo)上對應(yīng)應(yīng)的值。。64繪圖函數(shù)數(shù)簡介調(diào)用contourf(),繪制將將取值范范圍等分分為20份、、帶填充充效果的的等值線線圖。這這里演示示了另另外一種種設(shè)置X、Y軸取值值范圍的的方法。。它的前前兩個參參數(shù)分別別是計算算數(shù)組z時所使使用的X軸和Y軸上的的取樣點點,這兩兩個數(shù)組組必須是是一維的的。65繪圖函數(shù)數(shù)簡介還可以使使用等值值線繪制制隱函數(shù)數(shù)曲線.顯然然,無法法像繪制制一般函函數(shù)那樣樣,先創(chuàng)創(chuàng)建一個個等差數(shù)數(shù)組表示示變量的取值值點,然然后計算算出數(shù)組組中每個個x所對應(yīng)應(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藍藍色實線線并不是是完全連連續(xù)的,,在圖的的中間部部分它由由許多孤孤立的小小段構(gòu)成成。因為為等值線線在原點點附近無無限靠近近,因此此無論對對函數(shù)f的取值值空間如如何進行行細分,,總是會會有無法法分開的的地方,,最終造成成了圖中中的那些些孤立的的細小區(qū)區(qū)域。而而表示隱隱函數(shù)f(x,y)-0.1=0的的紅色虛虛線則是是閉合且且連續(xù)的的。69繪圖函數(shù)數(shù)簡介可以通過過contour()返回的的對象獲獲得等值值線上每每點的數(shù)數(shù)據(jù),下下面在IPython中觀察察變量cs,它它是一個個QuadContourSet對象象:cs對象象的collections屬性是是一個等等值線列列表,每每條等值值線用一一個LineCollection對象表表示:>>>cs.collections<alistof2mcoll.LineCollectionobjects>>>>runmatplotlib_implicit_func.py>>>cs<matplotllb.contour.QuadContourSetinstanceat0x0A348E90>70繪圖函數(shù)數(shù)簡介每個LineCollection對象都都有它自自己的顏顏色、線線型、線線寬等屬屬性,注注意這些些屬性所所獲得的的結(jié)果外外面還有有一層封封裝,要要獲得其其第0個元素素才是真真正的配配置:由類名可可知,LineCollection對象象是一組組曲線的的集合,,因此它它可以表表示像藍藍色實線線那樣由由多條線線構(gòu)成的的等值線線。它的的get_paths()方方法獲得得構(gòu)成等等值線的的所有路路徑,本本例中藍藍色實線線>>>c.get_color()[0]array([1.,0.,0.,1.])>>>c.get_linewidth()[0]271繪圖函數(shù)數(shù)簡介所表示的的等值線線由42條路路徑構(gòu)成成:路徑是一一個Path對對象,通通過它的的vertices屬屬性可以以獲得路路徑上所所有點的的坐標(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ù)數(shù)簡介下面的程程序從等等值線集集合cs中找到到表示等等值線的的路徑,,并使用用plot()將其繪繪制出來來.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])73繪圖函數(shù)數(shù)簡介三維繪圖圖mpl_toolkits.mplot3d模塊塊在matplotlib基基礎(chǔ)上提提供了三三維繪圖圖的功能能。由于于它使用用matplotlib的二二維繪圖圖功能來
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 雙十一勝局人資策略
- 2024年限定版農(nóng)業(yè)耕地承租協(xié)議版B版
- 農(nóng)產(chǎn)品逆襲雙十二
- 科技創(chuàng)新的領(lǐng)航者
- 外墻磚采購合同(2篇)
- 多測合一合同(2篇)
- 2024車輛管理代理協(xié)議樣本版B版
- 2025年昌平區(qū)食堂食品安全風(fēng)險評估與監(jiān)控合同3篇
- 專用陶瓷杯子采購協(xié)議模板2024版B版
- 上海二手房代理居間合同2024年版版B版
- 網(wǎng)吧企業(yè)章程范本
- 安徽省書法家協(xié)會會員登記表
- 阿特拉斯基本擰緊技術(shù)ppt課件
- 五格數(shù)理解釋及吉兇對照
- 婚姻狀況聲明書
- 新課程理念下的班主任工作藝術(shù)
- (完整版)企業(yè)破產(chǎn)流程圖(四張)
- 領(lǐng)導(dǎo)激勵藝術(shù)教材
- 化肥對土壤的影響
- 水泥罐抗傾覆驗算7頁
- 可行性研究報告 范文“母親水窖”建設(shè)項目可行性研究報告
評論
0/150
提交評論