版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
Matplotlib繪圖庫簡介什么是matplotlib庫Matplotlib是Python語言在二維繪圖方面使用最廣泛的一個庫其設(shè)計借鑒了MATLAB的繪圖功能,可以繪制線圖、散點圖、等高線圖、直方圖、柱狀圖、3D圖形、甚至圖形動畫等等。它可以和科學計算庫NumPy很好地結(jié)合,將用戶的計算數(shù)據(jù)圖形化。它提供了多種圖形存儲格式,比如存儲為矢量圖、位圖、動畫等。西安交通大學計算機教學實驗中心2安裝matplotlib首先使用win+R輸入cmd命令打開命令窗口,再使用以下命令進行安裝:
pipinstallmatplotlib這里pip是安裝python時,安裝的一個工具。3Matplotlib圖形構(gòu)成4Figure:指整個圖形??衫斫獬衫L圖板;Axes:繪圖區(qū),它被包含在Figure中。一個Figure可包含多個Axes;Axis:指坐標軸及相關(guān)刻度、標簽等;Artist:除去坐標軸之外,所有繪制在圖紙上的元素都屬于Artist對象,例如標題、直線、曲線、直方圖、餅圖等。1.繪制散點圖scatter(x,y,s,c,marker,alpha,linewidths)參數(shù)說明:x,y:長度相同的兩個數(shù)組,表示點坐標s:點的大小,默認20,可以是數(shù)組(每個值為點的大小)c:點的顏色,可以是顏色數(shù)組(每個值為對應(yīng)點顏色)marker:點的樣式,默認小圓點(即樣式'o')alpha:透明度設(shè)置,取值在0(透明)到1(不透明)之間linewidths:標記點的邊緣線的寬度,默認為1.5。西安交通大學計算機教學實驗中心51.繪制散點圖importmatplotlib.pyplotasplt
#導入繪圖模塊importnumpyasnp
#導入Numpy模塊x=np.array([1,2,3,4,5,6])#點的x坐標y=np.array([1.1,4.5,1.9,3.3,6.0,5.1])#點的y坐標plt.scatter(x,y)#繪圖函數(shù)plt.show()#顯示圖形西安交通大學計算機教學實驗中心61.繪制散點圖importmatplotlib.pyplotaspltimportnumpyasnpx=np.array([1.5,2.2,2.4,3,3.1,4,1.8,2.6,3.5]) #點的x坐標y=np.array([1.6,2.2,2.5,3.3,3.5,4.5,1.9,3.1,4.0]) #點的y坐標sizes=np.array([160,990,700,1000,400,60,80,100,200])alp=0.5
#設(shè)置透明度,取值在0(透明)到1(不透明)之間colors=np.array(['red','green','black','orange','brown','y','c','b','#18c900'])plt.scatter(x,y,s=sizes,c=colors,alpha=alp) plt.show()西安交通大學計算機教學實驗中心72.繪制直線和曲線西安交通大學計算機教學實驗中心8plot(x,y,color,linestyle,linewidth,marker,markersize)參數(shù)說明:x,y:兩個數(shù)組,表示一系列點的x、y坐標。將依次連接這些點color:線的顏色,取值見前文繪制散點圖部分linestyle,linewidth:線型、線寬(以像素為單位)
marker,markersize:點的標記形式及大小線型字符說明-實線--虛線-.點劃線:點線空不繪制點標記符號描述o實心圓v下三角^上三角<
左三角>
右三角s正方形*星號+加號x乘號2.繪制直線和曲線西安交通大學計算機教學實驗中心9繪制cos函數(shù)曲線importmatplotlib.pyplotaspltimportnumpyasnpx=np.linspace(0,np.pi,10)#在[0,π]上均勻生成10個點y_cos=np.cos(x) #計算10個點的cos值y_cos_h=y_cos/2 #將10個點的每個cos值除以2plt.plot(x,y_cos,color='red',marker='+',linestyle='--')plt.plot(x,y_cos_h,color='b',marker='^',linestyle=':')plt.show()2.繪制直線和曲線importmatplotlib.pyplotaspltimportnumpyasnpx=np.linspace(0,np.pi,10) #在[0,π]上均勻生成10個點y_sin=np.sin(x) #計算10個點的sin值y_sin_half=y_sin/2 #將10個點的每個sin值除以2plt.plot(x,y_sin,'bs-',linewidth=2,markersize=6)plt.plot(x,y_sin_half,'ro',linewidth=2,markersize=6)plt.show()3.繪制柱狀圖bar(x,height,width,bottom,color,align,edgecolor)barh(y,width,height,left,color,align,edgecolor)
關(guān)于bar()函數(shù)的參數(shù):x:數(shù)組,指定所有柱圖的水平坐標。height:數(shù)組,指定柱圖的高度,也就是需要展示的數(shù)據(jù)的大小。width:實數(shù),指定柱圖的寬度,默認0.8。bottom:數(shù)組,指定每個柱圖的起始高度。align:柱圖水平對齊方式,可選center(中心對齊)或edge(邊緣對齊)。edgecolor:柱圖邊框的顏色。3.繪制柱狀圖importnumpyasnpimportmatplotlib.pyplotaspltx=np.arange(4)y1=np.array([2.5,3.3,4.6,1.5])y2=np.array([1.5,2.3,3.0,1.5])plt.bar(x,y1,0.5,color='y',align='center',edgecolor='k',linewidth=1)#下面繪制的第2組柱狀圖以y1為底部坐標,達到堆疊效果plt.bar(x,y1,0.5,color='m',align='center',edgecolor='k',linewidth=1,bottom=y1)plt.show()4.繪制直方圖 hist(x,bins,range,density,color,edgecolor,alpha)參數(shù)說明:x:數(shù)組,存儲要計算直方圖的數(shù)據(jù)。bins:直方圖的柱數(shù),默認為10。range:所考察的數(shù)值范圍。默認值為所有數(shù)據(jù)的最小值到最大值。density:默認為False,表示頻數(shù)直方圖;若為True,則表示頻率直方圖。color:直方圖顏色。edgecolor:直方圖每個柱形邊框顏色。alpha:透明度,取值0到1,0—透明,1—不透明4.繪制直方圖importnumpyasnpimportmatplotlib.pyplotaspltdata=np.random.standard_normal(1000)#按正態(tài)分布取值,生成100個數(shù)n_bins=16plt.hist(data,n_bins,color='c',edgecolor='k')plt.show()5.繪制餅圖importmatplotlib.pyplotaspltnum=[20,30,40,50]grade=['A','B','C','D']clr=['lightgreen','cyan','red','yellow']exp=(0.1,0,0,0)plt.pie(num,explode=exp,labels=grade,colors=clr,autopct='%.1f%%')plt.show()字體font1={'family':'calibri','style':'italic','color':'r','size':15}這里屬性family、style、color、size分別是字體名、是否為粗體或斜體、顏色、大小。函數(shù)xlabel()和ylabel()用來設(shè)置x軸和y軸的標簽,函數(shù)title()用來設(shè)置標題。例如:font1={"family":"Simsun","fontsize":13,"color":"b"} #定義字體font1plt.xlabel("這是x軸標簽",font1)
#在xlabel()中使用font1plt.title("這是標題",font1) #在title()中使用font1坐標軸和刻度設(shè)置importmatplotlib.pyplotaspltimportnumpyasnpplt.ylim(-4,4)ax=plt.gca() #獲得坐標軸對象ax.spines['left'].set_position('center') #設(shè)置y軸居中ax.spines['bottom'].set_position(('data',0)) #設(shè)置x軸位于數(shù)據(jù)y軸0處ax.spines['right'].set_visible(False) #設(shè)置右側(cè)邊框不可見ax.spines['top'].set_visible(False) #設(shè)置上邊框不可見plt.tick_params(colors='b',labelsize=12)#設(shè)置坐標軸上字體顏色、尺寸x=np.linspace(-3,3,60)y=x**3-3*xplt.plot(x,y,'g-')plt.text(-3,3,'$f(x)=x^3-3x$',fontsize=14) #顯示函數(shù)方程plt.show()實現(xiàn)一頁多圖使用pyplot的subplot()函數(shù)可以在一幅圖(Figure)中繪制多個子圖,其函數(shù)原型為:subplot(nrows,ncols,plot_num)參數(shù)說明:nrows,ncols:分別為所包含子圖的總行數(shù)、總列數(shù)。plot_num:將要繪制的子圖號。所有子圖自左向右、自上而下從1開始編號。importmatplotlib.pyplotaspltimportnumpyasnpplt.figure(figsize=(7.3,5.5),dpi=100) plt.subplots_adjust(wspace=0.3,hspace=0.4) #開始繪制1號子圖
x1=np.array([0,5,10])y1=np.array([0,4,6])z1=np.array([2,6,8])plt.subplot(2,2,1) plt.plot(x1,y1,'rs-',label='A1')plt.plot(x1,z1,'go-.',label='A2')plt.legend()plt.title("plot1")#開始繪制2號子圖x2=np.array([1,2,3,4])y2=np.array([1,2,2.5,2.6])z2=np.array([2,0.8,0.2,0])plt.subplot(2,2,2) plt.plot(x2,y2)plt.plot(x2,z2)plt.legend(['B1','B2'])plt.title("plot2")#開始繪制3號子圖x3=np.array([1,2,3,4,5,6])y3=np.array([6,10,7,6,3.8,7])z3=np.array([8,10,6,5,2,4])plt.subplot(2,2,3) #左下角子圖,編號3bar_width=0.4plt.bar(x3,y3,bar_width,color='m',label='C1')plt.bar(x3+bar_width,z3,bar_width,color='c',label='C2')plt.legend(ncol=2)plt.title("plot3")#開始繪制4號子圖x4=np.array([3,6,10,7,2])plt.subplot(2,2,4)
#右下角子圖,編號4grade=['A','B','C','D','E']clr=['lightgreen','cyan','orange','yellow','lightblue']plt.pie(x4,labels=grade,colors=clr,autopct='%.1f%%')plt.xlim(-1.0,2.1)#x軸數(shù)值設(shè)置plt.ylim(-1.2,1.4)plt.title("plot4")plt.legend(bbox_to_anchor=(1.1,0.8))plt.suptitle("subplotTest",)plt.show()21精勤求學敦篤勵志果毅力行忠恕任事西安交通大學計算機教學實驗中心趙英良Pillow圖像處理庫Pillow圖像庫Pillow庫用于圖像處理,有二十多個模塊,比如圖像處理模塊Image繪圖模塊ImageDraw添加文本模塊ImageFont圖像增強模塊ImageEnhance圖像濾波模塊ImageFilter …………安裝Pillow的命令:pipinstallpillow西安交通大學計算機教學實驗中心23圖像的簡單編輯:獲取信息open()方法返回一個Image類對象,該對象具有width(寬)、height(高)、mode(色彩模式)、format(格式)等屬性。24fromPILimportImage img=Image.open('test.jpg') print('圖像寬度(px):',img.width,'\t圖像高度(px):',img.height)print('顏色模式:',img.mode,'\t圖像格式:',img.format)img.show()圖像寬度(px):800 圖像高度(px):475顏色模式:RGB
圖像格式:JPEG。圖像的簡單編輯—圖像裁剪25fromPILimportImageimg=Image.open('test.jpg')#打開圖像#調(diào)用crop方法,傳入裁剪區(qū)域,獲得區(qū)域內(nèi)的圖像img_crop=img.crop((20,93,609,435)) img_crop.save('test_crop.jpg') #保存裁剪后的圖像圖像的簡單編輯—圖像復制和粘貼26fromPILimportImageim=Image.open('test.jpg') copyIm=im.copy() #創(chuàng)建圖像副本nameIm=Image.open('name.png')r,g,b,a=nameIm.split() #分離通道copyIm.paste(nameIm,(550,23),mask=a) #在圖像副本上粘貼文字圖1copyIm.save('pasteImg1.png')mottoIm=Image.open('motto.png')r,g,b,a=mottoIm.split() #分離通道im.paste(mottoIm,(580,16),mask=a) #在圖像上粘貼文字圖2im.save('pasteImg2.png')圖像的簡單編輯—圖像復制和粘貼27+fromPILimportImageimg=Image.open('test.jpg')png=img.convert('1') #轉(zhuǎn)換為黑白圖像png.save('BlackWhite.jpg') png=img.convert('L') #轉(zhuǎn)換為灰度圖像png.save('GrayScale.jpg') png=img.convert('RGBA') #轉(zhuǎn)換為帶透明度的圖像png.save('TrueColor.png')
圖像的簡單編輯—圖像色彩模式轉(zhuǎn)換28Image類的transpose()方法可以實現(xiàn)圖像的垂直、水平翻轉(zhuǎn),語法格式如下:transpose(method)method參數(shù)決定了圖片要如何翻轉(zhuǎn),參數(shù)值如下:Image.Transpose.FLIP_LEFT_RIGHT:左右水平翻轉(zhuǎn)。Image.Transpose.FLIP_TOP_BOTTOM:上下垂直翻轉(zhuǎn)。Image.Transpose.ROTATE_90:圖像旋轉(zhuǎn)90度。Image.Transpose.ROTATE_180:圖像旋轉(zhuǎn)180度。Image.Transpose.ROTATE_270:圖像旋轉(zhuǎn)270度。Image.Transpose.TRANSPOSE:圖像轉(zhuǎn)置。Image.Transpose.TRANSVERSE:將圖像進行轉(zhuǎn)置,再水平翻轉(zhuǎn)
圖像的幾何變換29圖像的幾何變換30逆時針旋轉(zhuǎn)90度原圖水平鏡像轉(zhuǎn)置垂直鏡像圖像增強31ImageEnhance模塊用于圖像增強,可以調(diào)節(jié)圖像亮度、對比度、飽和度等。使用該模塊的方法是首先建立一個圖像增強對象,再利用該對象調(diào)節(jié)相應(yīng)指標。建立圖像增強對象一般使用下面語句之一,它們都是以一個Image圖形對象作為參數(shù)。enhancer=ImageEnhance.Brightness(image)#建立亮度調(diào)節(jié)對象enhancer=ImageEnhance.Contrast(image)#建立對比度調(diào)節(jié)對象enhancer=ImageEnhance.Color(image) #建立飽和度調(diào)節(jié)對象任何一種圖像增強對象都是通過調(diào)用對象的enhance方法來調(diào)節(jié)相應(yīng)指標,方法如下:enhancer.enhance(factor)其中,factor為增強因子,取值是大于等于零的實數(shù),factor為1.0表示保持圖形原有狀態(tài)。圖像增強32
圖像增加亮度圖像增加對比度圖像過濾33
fromPILimportImage,ImageFilter #導入Image類和ImageFilter類im=Image.open("test.jpg")im_blur=im.filter(ImageFilter.BLUR) #圖像模糊處理im_blur.show()圖像過濾34
fromPILimportImage,ImageFilterim=Image.open("test.jpg")im=im.filter(ImageFilter.CONTOUR) #生成輪廓圖im.show()圖像過濾35
fromPILimportImage,ImageFilterim=Image.open("test.jpg")im=im.filter(ImageFilter.EMBOSS) #浮雕圖im.show()36精勤求學敦篤勵志果毅力行忠恕任事西安交通大學計算機教學實驗中心趙英良音頻視頻處理庫音頻錄制與回放利用pyaudio進行錄音,關(guān)鍵步驟有三步:
①建立音頻流對象;②建立wav文件;③循環(huán)將音頻流中的數(shù)據(jù)寫入wav文件。建立音頻流對象需使用pyAudio類的open方法,其參數(shù)包括采樣格式(format)、聲道數(shù)(channels)、采樣率(rate)、數(shù)據(jù)塊大?。╢rames_per_buffer)、是否為輸入流(input)、是否為輸出流(output)等。錄音時將參數(shù)input設(shè)為True,播音時將參數(shù)output設(shè)為True。錄音文件可利用wave模塊的open方法建立。為了正確存儲音頻,新建的wav文件的參數(shù)(采樣格式、聲道數(shù)等)應(yīng)該和音頻流對應(yīng)的參數(shù)保持一致西安交通大學計算機教學實驗中心38音頻編輯音頻剪輯可以使用pydub庫實現(xiàn)。該模塊自身只支持wav格式的文件處理。如果想處理其他格式的音頻,那么需要在本地安裝FFmpeg庫。391.打開音頻文件打開音頻文件要使用pydub的AudioSegment類,下面是打開不同格式音頻文件的方法:frompydubimportAudioSegmentmusic=AudioSegment.from_wav('東方紅.wav') #讀取wav文件music=AudioSegment.from_mp3('東方紅.mp3') #讀取mp3文件music=AudioSegment.from_ogg('東方紅.ogg') #讀取ogg文件music=AudioSegment.from_flv('東方紅.flv') #讀取flv文件的音頻音頻編輯402.音頻剪切打開音頻文件后,就可以進行剪切、拼接等操作。例如:clip=music[:20*1000] #截取前20秒clip=music[-20000:] #截取后20秒clip=music[20*1000:40*1000] #從第20秒截取到第40秒以上括號內(nèi)的時間都要轉(zhuǎn)換成以毫秒為單位。3.音頻拼接兩段音頻的拼接用加號就可以實現(xiàn),例如:clip1=music[:20*1000] #裁剪前20秒音頻clip2=music[-20*1000:] #裁剪后20秒音頻clip=clip1+clip2 #拼接音頻音頻編輯414.調(diào)節(jié)音量音量的增減只需要用音頻對象加一個常數(shù)即可:music=music-5 #音量減少5dBmusic=music+5 #音量增加5dB5.漸入漸出效果在連續(xù)演奏多段音樂時,交叉漸入漸出(淡入、淡出)是兩段音樂之間常見的過渡方式。假如有music1和music2兩段音頻,有6秒的交叉過度:music3=music1.append(music2,crossfade=6000) 視頻回放42ffpyplayer庫共有Player、Writer、Images、Tools四個模塊Player模塊用于音視頻播放Writer模塊用于生成視頻文件(不含音頻)Images模塊用于圖像格式轉(zhuǎn)換Tools模塊用于獲取編碼信息、編碼轉(zhuǎn)換等操作。Player模塊只有一個MediaPlayer類,它移植了FFmpeg中的播放器FFplay的大多數(shù)功能。該類使用get_frame()函數(shù)獲取視頻中的一幀圖像,同時利用SDL自動播放音頻。
視頻回放43視頻播放器使用了ffpyplayer庫的MediaPlayer類、Image
類,pillow庫的Image類、ImageTk類。其中ImageTk可以從pillow圖像創(chuàng)建適合Tkinter使用的位圖圖像。最終圖像在Tkinter的Label上顯示。具體步驟如下:①利用MediaPlayer類的get_frame()方法獲取每一幀圖像;②利用ffpyplayer的Image類方法to_memoryview()將圖像轉(zhuǎn)換成內(nèi)存中的數(shù)組;③利用pillow的Image類方法fromarray()將得到的數(shù)組轉(zhuǎn)換成pillow圖像;④利用pillow的ImageTk類方法將pillow圖像轉(zhuǎn)換成適合Tkinter使用的圖像,并在Label上顯示該圖像。
視頻回放44fromtkinterimport*importnumpyasnpfromPILimportImage,ImageTkfromffpyplayer.playerimportMediaPlayerval=''player=NonedefPlayVideo():globalvalframe,val=player.get_frame()whileval!='eof':ifframeisnotNone:
img,tm=frame
#獲取幀的圖及當前時間[w,h]=img.get_size() #獲取圖像寬、高arr=np.asarray(img.to_memoryview()[0]).reshape(h,w,3)
#將圖像轉(zhuǎn)為數(shù)組列表current_image=Image.fromarray(arr).resize((560,320))
#數(shù)組轉(zhuǎn)換成圖像,縮放imgtk=ImageTk.PhotoImage(image=current_image)
#創(chuàng)建適用于tkinter的圖像movieLabel.config(image=imgtk)
#動態(tài)修改標簽上的圖像
movieLabel.update() #每次執(zhí)行都更新界面frame,val=player.get_frame() #讀取下一幀player.close_player()視頻回放45defcloseWindow():ifval!='eof': player.close_player()#若正在播放則先停止播放root.destroy()player=MediaPlayer("西遷精神.mp4")root=Tk()root.title('視頻播放')root.geometry("580x350+400+200")#更改大小和位置img1=Image.new("RGB",(560,320),'darkgray') #建立圖像img2=ImageTk.PhotoImage(image=img1)
#轉(zhuǎn)換圖像為Tk圖像movieLabel=Label(root,image=img2) #創(chuàng)建用于播放視頻的容器movieLabel.pack(padx=10,pady=10)tocol('WM_DELETE_WINDOW',closeWindow)PlayVideo()視頻編輯46可以利用moviepy或opencv進行,它們都需要FFmpeg的支持才能很好地工作。安裝這兩個模塊只需運行pip命令即可。相比而言,利用moviepy操作視頻更加便利,本節(jié)僅介紹moviepy的簡單使用方法。1.打開視頻文件引入moviepy.editor下的全部類:frommoviepy.editorimport*利用VideoFileClip類打開視頻,建立相關(guān)對象:video=VideoFileClip('西遷精神.mp4')2.保存視頻片段假設(shè)clip是修改完成的視頻對象,使用下面方法可以保存視頻文件:clip.write_videofile("newclip.mp4")視頻編輯473.獲取視頻信息輸出視頻片段clip的時長(秒)、圖像分辨率(寬和高)、每秒幀數(shù):print(clip.dur
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年企業(yè)員工派遣服務(wù)協(xié)議
- 2024南京住宅二手交易協(xié)議范本
- 2024年第三方商鋪租賃協(xié)議
- 商鋪租賃協(xié)議書2024年
- 2024年協(xié)議管理流程及崗位職責
- 2024年擔保公司貸款協(xié)議格式
- 2024水利設(shè)施堤壩施工合作協(xié)議
- 2024年酒店管理承包協(xié)議格式
- 2024年二手物資買賣協(xié)議模板
- 2024年度軟件定制開發(fā)服務(wù)協(xié)議模板
- 廉潔風險點及控制措施
- 2024年廣西來賓產(chǎn)業(yè)投資集團有限公司招聘筆試參考題庫含答案解析
- 項目管理甘特圖課件
- 2024年甘肅省普通高中信息技術(shù)會考試題(含24套)
- 我國的武裝力量課件
- 液化石油氣瓶安全使用告知書范文
- 供應(yīng)室護理責任組長競聘
- 高中數(shù)學教師的專業(yè)發(fā)展路徑
- LTC與鐵三角從線索到回款
- 《旅游市場營銷》課程教學設(shè)計
- 工程流體力學課后習題答案-(杜廣生)
評論
0/150
提交評論