版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
單元十一
Python可視化與可視化工具3pandas基本圖形繪制目錄matplotlib繪圖2Python可視化與可視化工具介紹1matplotlib.pyplot的使用4項(xiàng)目實(shí)戰(zhàn)5單元小結(jié)6
數(shù)據(jù)可視化是以圖形或圖表的形式展示數(shù)據(jù)。數(shù)據(jù)可視化后,可以更加直觀地幫助人們快速地理解數(shù)據(jù),發(fā)現(xiàn)數(shù)據(jù)的關(guān)鍵點(diǎn)。
數(shù)據(jù)可視化技術(shù)是關(guān)于數(shù)據(jù)視覺表現(xiàn)形式的科學(xué)技術(shù)研究。主要指的是較為高級(jí)的技術(shù)方法,而這些技術(shù)方法允許利用圖形、圖像處理、計(jì)算機(jī)視覺以及用戶界面,通過(guò)表達(dá)、建模以及對(duì)立體、表面、屬性以及動(dòng)畫的顯示,對(duì)數(shù)據(jù)加以可視化解釋。Python語(yǔ)言有豐富的、功能強(qiáng)大的、第三方庫(kù)的支持,在數(shù)據(jù)可視化方面具有較強(qiáng)的功能。數(shù)據(jù)可視化概述數(shù)據(jù)可視化對(duì)于數(shù)據(jù)描述以及探索性分析至關(guān)重要,恰當(dāng)?shù)慕y(tǒng)計(jì)圖表可以更有效的傳遞數(shù)據(jù)信息。在Python中已經(jīng)有很多數(shù)據(jù)可視化方面的第三方庫(kù),例如:Matplotlib、pandas、Seaborn、ggplot、Bokeh、pygal、geoplotlib等。matplotlib是一個(gè)Python繪圖庫(kù),已經(jīng)成為Python中公認(rèn)的數(shù)據(jù)可視化工具,通過(guò)matplotlib可以很輕松地畫一些或簡(jiǎn)單或復(fù)雜地圖形,幾行代碼即可生成折線圖、直方圖、條形圖、散點(diǎn)圖等,使用方便簡(jiǎn)單。pandas庫(kù)的應(yīng)變得更加普及,它的身影經(jīng)常見于市場(chǎng)分析、金融分析以及科學(xué)計(jì)算中。作為數(shù)據(jù)分析工具的集大成者,pandas作者曾說(shuō),pandas中的可視化功能比matplotlib的子庫(kù)pyplot更加簡(jiǎn)便和功能強(qiáng)大。通常情況下pandas就足夠應(yīng)付全部的可視化工作了。Seaborn是基于matplotlib產(chǎn)生的一個(gè)模塊,專攻于統(tǒng)計(jì)可視化,可以和pandas進(jìn)行無(wú)縫鏈接,使初學(xué)者更容易上手。相對(duì)于matplotlib,Seaborn語(yǔ)法更簡(jiǎn)潔,兩者關(guān)系類似于numpy和pandas之間的關(guān)系。
HoloViews是一個(gè)開源的Python庫(kù),可以用非常少的代碼行完成數(shù)據(jù)分析和可視化,除了默認(rèn)的matplotlib后端外,還添加了一個(gè)Bokeh后端。Bokeh提供了一個(gè)強(qiáng)大的平臺(tái),通過(guò)結(jié)合Bokeh提供的交互式小部件,可以使用HTML5canvas和WebGL快速生成交互性和高維可視化,非常適合于數(shù)據(jù)的交互式探索。Altair是Python一個(gè)公認(rèn)的統(tǒng)計(jì)可視化庫(kù)。它的API簡(jiǎn)單、友好、一致,并建立在強(qiáng)大的vega-lite(交互式圖形語(yǔ)法)之上。AltairAPI不包含實(shí)際的可視化呈現(xiàn)代碼,而是按照vega-lite規(guī)范發(fā)出JSON數(shù)據(jù)結(jié)構(gòu)。由此產(chǎn)生的數(shù)據(jù)可以在用戶界面中呈現(xiàn),這種優(yōu)雅的簡(jiǎn)單性產(chǎn)生了漂亮且有效的可視化效果,且只需很少的代碼。數(shù)據(jù)可視化工具PyQtGraph是在PyQt4/PySide和numpy上構(gòu)建的純Python的GUI圖形庫(kù)。它主要用于數(shù)學(xué)、科學(xué)、工程領(lǐng)域。盡管PyQtGraph完全是在Python中編寫的,但它本身就是一個(gè)非常有能力的圖形系統(tǒng),可以進(jìn)行大量的數(shù)據(jù)處理,數(shù)字運(yùn)算;使用了Qt的GraphicsView框架優(yōu)化和簡(jiǎn)化了工作流程,實(shí)現(xiàn)以最少的工作量完成數(shù)據(jù)可視化,且速度也非??臁?/p>
ggplot是基于R的ggplot2和圖形語(yǔ)法的Python繪圖系統(tǒng),實(shí)現(xiàn)了更少的代碼繪制更專業(yè)的圖形。它使用一個(gè)高級(jí)且富有表現(xiàn)力的API來(lái)實(shí)現(xiàn)線、點(diǎn)等元素的添加,顏色的更改等不同類型可視化組件的組合或添加,而不需要重復(fù)使用相同的代碼,然而這對(duì)那些試圖進(jìn)行高度定制的用戶來(lái)說(shuō),ggplot并不是最好的選擇,盡管它也可以制作一些非常復(fù)雜、好看的圖形。ggplot與pandas緊密聯(lián)系。如果你打算使用ggplot,最好將數(shù)據(jù)保存在DataFrames中。
Bokeh是一個(gè)Python交互式可視化庫(kù),支持現(xiàn)代化web瀏覽器展示(圖表可以輸出為JSON對(duì)象、HTML文檔或者可交互的網(wǎng)絡(luò)應(yīng)用)。它提供風(fēng)格優(yōu)雅、簡(jiǎn)潔的D3.js的圖形化樣式,并將此功能擴(kuò)展到高性能交互的數(shù)據(jù)集、數(shù)據(jù)流上。使用Bokeh可以快速便捷地創(chuàng)建交互式繪圖、儀表板和數(shù)據(jù)應(yīng)用程序等。
Bokeh能與NumPy、Pandas、Blaze等大部分?jǐn)?shù)組或表格式的數(shù)據(jù)結(jié)構(gòu)完美結(jié)合。pygal是一種開放標(biāo)準(zhǔn)的矢量圖形語(yǔ)言,它基于XML(ExtensibleMarkupLanguage),可以生成多個(gè)輸出格式的高分辨率Web圖形頁(yè)面,還支持給定數(shù)據(jù)的HTML表導(dǎo)出。用戶可以直接用代碼來(lái)描繪圖像,可以用任何文字處理工具打開SVG圖像,通過(guò)改變部分代碼來(lái)使圖像具有交互功能,并且可以插入到HTML中通過(guò)瀏覽器來(lái)觀看。
VisPy是一個(gè)用于交互式科學(xué)可視化的Python庫(kù),快速、可伸縮、且易于使用,是一個(gè)高性能的交互式2D/3D數(shù)據(jù)可視化庫(kù),利用了現(xiàn)代圖形處理單元(gpu)的計(jì)算能力,通過(guò)OpenGL庫(kù)來(lái)顯示非常大的數(shù)據(jù)集。NetworkX是一個(gè)Python包,用于創(chuàng)建、操縱和研究復(fù)雜網(wǎng)絡(luò)的結(jié)構(gòu)、以及學(xué)習(xí)復(fù)雜網(wǎng)絡(luò)的結(jié)構(gòu)、功能及其動(dòng)力學(xué)。NetworkX提供了適合各種數(shù)據(jù)結(jié)構(gòu)的圖表、二合字母和多重圖,還有大量標(biāo)準(zhǔn)的圖算法,網(wǎng)絡(luò)結(jié)構(gòu)和分析措施,可以產(chǎn)生隨機(jī)網(wǎng)絡(luò)、合成網(wǎng)絡(luò)或經(jīng)典網(wǎng)絡(luò),且節(jié)點(diǎn)可以是文本、圖像、XML記錄等,并提供了一些示例數(shù)據(jù)(如權(quán)重,時(shí)間序列)。NetworkX測(cè)試的代碼覆蓋率超過(guò)90%,是一個(gè)多樣化,易于教學(xué),能快速生成圖形的Python平臺(tái)。數(shù)據(jù)可視化工具Plotly的Pythongraphinglibrary在網(wǎng)上提供了交互式的、公開的,高質(zhì)量的圖表集,可與R、Python、Matlab等軟件對(duì)接。它擁有在別的庫(kù)中很難找到的幾種圖表類型,如等值線圖,樹形圖和三維圖表等,圖標(biāo)類型也十分豐富,申請(qǐng)了API密鑰后,可以一鍵將統(tǒng)計(jì)圖形同步到云端。但美中不足的是,打開國(guó)外網(wǎng)站會(huì)比較費(fèi)時(shí),且一個(gè)賬號(hào)只能創(chuàng)建25個(gè)圖表,除非你升級(jí)或刪除一些圖表。folium是一個(gè)建立在Python系統(tǒng)之上的js庫(kù),可以很輕松地將在Python中操作的數(shù)據(jù)可視化為交互式的單張地圖,且緊密地將數(shù)據(jù)與地圖聯(lián)系在一起,可自定義箭頭、網(wǎng)格等HTML格式的地圖標(biāo)記。該庫(kù)還附有一些內(nèi)置的地形數(shù)據(jù)。Gleam允許你只利用Python構(gòu)建數(shù)據(jù)的交互式,生成可視化的網(wǎng)絡(luò)應(yīng)用。無(wú)需具備HTMLCSS或JaveScript知識(shí),就能使用任一種Python可視化庫(kù)控制輸入。當(dāng)創(chuàng)建一個(gè)圖表的時(shí)候,可以在上面加上一個(gè)域,讓任何人都可以實(shí)時(shí)地玩轉(zhuǎn)你的數(shù)據(jù),讓你的數(shù)據(jù)更通俗易懂。Vincent是一個(gè)很酷的可視化工具,它以Python數(shù)據(jù)結(jié)構(gòu)作為數(shù)據(jù)源,然后把它翻譯成Vega可視化語(yǔ)法,并且能夠在D3.js上運(yùn)行。這讓你可以使用Python腳本來(lái)創(chuàng)建漂亮的3D圖形來(lái)展示你的數(shù)據(jù)。Vincent底層使用pandas數(shù)據(jù),并且支持大量的圖表:條形圖、線圖、散點(diǎn)圖、熱力圖、堆條圖、分組條形圖、餅圖、圈圖、地圖等等。Python-igraph是Python界面的igraph高性能圖形庫(kù),主要針對(duì)復(fù)雜的網(wǎng)絡(luò)研究和分析。Mayavi2是一個(gè)通用的、跨平臺(tái)的三維科學(xué)數(shù)據(jù)可視化工具??梢栽诙S和三維空間中顯示標(biāo)量、向量和張量數(shù)據(jù)。可通過(guò)自定義源、模塊和數(shù)據(jù)過(guò)濾器輕松擴(kuò)展。Mayavi2也可以作為一個(gè)繪圖引擎,生成matplotlib或gnuplot腳本,也可以作為其它應(yīng)用程序的交互式可視化的庫(kù),將生成的圖片嵌入到其它應(yīng)用程序中。數(shù)據(jù)可視化工具geoplotlib是Python的一個(gè)用于地理數(shù)據(jù)可視化和繪制地圖的工具箱,并提供了一個(gè)原始數(shù)據(jù)和所有可視化之間的基本接口,支持在純Python中開發(fā)硬件加速的交互式可視化,并提供點(diǎn)映射、內(nèi)核密度估計(jì)、空間圖、泰森多邊形圖、形狀文件和許多更常見的空間可視化的實(shí)現(xiàn)。除了為常用的地理數(shù)據(jù)可視化提供內(nèi)置的可視化功能外,geoplotlib還允許通過(guò)定義定制層來(lái)定義復(fù)雜的數(shù)據(jù)可視化(繪制OpenGL,如分?jǐn)?shù)、行和具有高性能的多邊形),創(chuàng)建動(dòng)畫。Basemap和Cartopy包支持多個(gè)地理投影,并提供一些可視化效果,包括點(diǎn)圖、熱圖、等高線圖和形狀文件。PySAL是一個(gè)由Python編寫的空間分析函數(shù)的開源庫(kù),它提供了許多基本的工具,主要用于形狀文件。但是,這些庫(kù)不允許用戶繪制地圖貼圖,并且對(duì)自定義可視化、交互性和動(dòng)畫的支持有限。Leather適用于現(xiàn)在就需要一個(gè)圖表并且對(duì)圖表是不是完美并不在乎的人。它可以用于所有的數(shù)據(jù)類型,然后生成SVG圖像,這樣在調(diào)整圖像大小的時(shí)候就不會(huì)損失圖像質(zhì)量。這個(gè)庫(kù)很新,一些文檔還沒有最后完成。圖像成品非?;A(chǔ)——但是這就是設(shè)計(jì)目標(biāo)。missingno用圖像的方式讓你能夠快速評(píng)估數(shù)據(jù)缺失的情況,而不是在數(shù)據(jù)表里面步履維艱。可以根據(jù)數(shù)據(jù)的完整度對(duì)數(shù)據(jù)進(jìn)行排序或過(guò)濾,或者根據(jù)熱度圖或樹狀圖來(lái)考慮對(duì)數(shù)據(jù)進(jìn)行修正。Python有很多不同的可視化工具,選擇一個(gè)正確的工具有時(shí)是一種挑戰(zhàn)。如果你想做一些專業(yè)的統(tǒng)計(jì)圖表,推薦你使用Seaborn、Altair;數(shù)學(xué)、科學(xué)、工程領(lǐng)域的學(xué)者就選擇PyQtGraph、VisPy、Mayavi2;網(wǎng)絡(luò)研究和分析方面,NetworkX、Python-igraph會(huì)是一個(gè)不錯(cuò)的選擇;地理投影就選geoplotlib、folium;評(píng)估數(shù)據(jù)缺失就選missingno;有了HoloViews再也不用為高維圖形犯愁;如果你不喜歡花俏的修飾,那就選擇Leather。如果你是一名新手matplotlib、pandas會(huì)很好上手。本單元將重點(diǎn)講解matplotlib以及pandas的繪圖功能,這也是現(xiàn)在最為常用、最為穩(wěn)健,同時(shí)功能也非常豐富的數(shù)據(jù)可視化解決方案。數(shù)據(jù)可視化工具3pandas基本圖形繪制目錄matplotlib繪圖2Python可視化與可視化工具介紹1matplotlib.pyplot的使用4項(xiàng)目實(shí)戰(zhàn)5單元小結(jié)6
折線圖是二維圖,由(x,y)坐標(biāo)確定相應(yīng)的點(diǎn),然后將這些點(diǎn)依次連接起來(lái),就形成了折線圖。折線圖通常用來(lái)表示數(shù)據(jù)變化的趨勢(shì),一般是隨時(shí)間變化的趨勢(shì)。(1)繪圖準(zhǔn)備主要做的是基本庫(kù)導(dǎo)入,主要是pandas、numpy、matplotlib、matplotlib.pyplot庫(kù)的導(dǎo)入。在腳本文件的開頭包含以下導(dǎo)入語(yǔ)句或者交互模式依次執(zhí)行以下語(yǔ)句:importnumpyasnpimportpandasaspdimportmatplot.pyplotasplt(2)由Series類型數(shù)據(jù)生成折線圖使用Series.plot()方法創(chuàng)建折線圖①創(chuàng)建Series對(duì)象>>>s=pd.Series(np.random.rand(100))#隨機(jī)產(chǎn)生100個(gè)0~1之間的服從正態(tài)分布樣本②繪制折線圖>>>s.plot()③顯示所繪圖形>>>plt.show()Python基本圖形繪制——拆線圖值在0~1Python基本圖形繪制——拆線圖Series.plot()方法參數(shù)很多,使用help(pd.Series.plot)列出Series.plot()方法所有的參數(shù)為:“self,kind=‘line’,ax=None,figsize=None,use_index=True,title=None,grid=None,legend=False,style=None,logx=False,logy=False,loglog=False,xticks=None,yticks=None,xlim=None,ylim=None,rot=None,fontsize=None,colormap=None,table=False,yerr=None,xerr=None,label=None,secondary_y=False,**kwds”。參數(shù)含義見下表。參數(shù)說(shuō)明label用于圖例的標(biāo)簽ax要在其上進(jìn)行繪制的matplotlibsubplot(子圖)對(duì)象。如果沒有設(shè)置,則使用當(dāng)前matplotlibsubplotstyle傳給matplotlib的風(fēng)格的字符串(如’ko–’),圖形對(duì)象顯示樣式kind可以是’line’、‘bar’、‘barh’、‘kde’、’hist’、’box’、’density’、’area’、’pie’,表示圖的類型logy在Y軸上使用對(duì)數(shù)標(biāo)尺use_index邏輯值,默認(rèn)用索引做x軸rot旋轉(zhuǎn)刻度標(biāo)簽(0-360)xticks設(shè)置x軸刻度的值,序列形式y(tǒng)ticks設(shè)置Y軸刻度的值,序列形式xlimX軸的范圍,列表或元組ylimY軸的范圍,列表或元組grid顯示軸網(wǎng)格線figsize元組表示的圖的尺寸,單位為英寸fontsize坐標(biāo)軸刻度值的字號(hào)title圖表的標(biāo)題table邏輯值,為True時(shí),顯示數(shù)據(jù)表格legend邏輯值,為True時(shí),顯示圖例colormap設(shè)置圖區(qū)域的顏色secondary_y邏輯值,為True時(shí),y軸在圖的右側(cè)loglog邏輯值,同時(shí)設(shè)置x,y軸刻度是否取對(duì)數(shù)**kwds關(guān)鍵字參數(shù),將選項(xiàng)傳遞給matplotlibplotting方法Python基本圖形繪制——拆線圖style參數(shù),表示傳給matplotlib風(fēng)格的字符串(如“ko–”),其中“k”位置表示的是線條顏色,對(duì)于線條顏色的種類還有以下幾個(gè)細(xì)分:別名bgrcmykw全名BlueGreenRedCyanMagentaYellowBlackWhite“o”位置表示折線每個(gè)點(diǎn)的表現(xiàn)形式,“o”表示實(shí)心圓點(diǎn),“x”表示x型點(diǎn);
“-”位置表示線型,“-”表示實(shí)線,“–”表示短劃線,“-.”表示點(diǎn)劃線,“:”表示虛線。也可將這三者表示形式分開,寫法如:series.plot(linestyle='dashed',color='k',marker='o')
④重繪折線圖>>>s.plot(legend=True,title='linepicture',style=’bo-‘)#增加了圖例、標(biāo)題、線形顏色>>>plt.show()Python基本圖形繪制——拆線圖圖例圖標(biāo)題Python基本圖形繪制——拆線圖(3)由DataFrame類型數(shù)據(jù)生成折線圖使用DataFrame.plot()方法創(chuàng)建折線圖①創(chuàng)建DataFrame對(duì)象>>>df=pd.DataFrame(np.random.randn(100,2),index=range(100),columns=list('AB'))>>>df=df.cumsum() #累積值,使圖有區(qū)分②繪圖>>>df.plot(use_index=True,title=”DataFramepicture”)③顯示圖形>>>plt.show()Python基本圖形繪制——拆線圖Python基本圖形繪制——拆線圖每個(gè)columns列繪制一條折線,用不同的圖例進(jìn)行區(qū)別DataFrame.plot()方法除了與Series.plot()方法相同的參數(shù)外,還有一些參數(shù)見下表。
參數(shù)說(shuō)明subplots邏輯值,為True時(shí),將各個(gè)DataFrame列繪制到單獨(dú)的subplot(子圖)中sharex如果subplots=True,則共用同一個(gè)X軸,包括刻度和界限sharey同上legend添加一個(gè)圖例到subplot(默認(rèn)為True)sort_columns以字母表順序繪制各列,默認(rèn)使用前列順序另外,DataFrame.plot()方法的“kind”參數(shù)多了兩種類型的圖,即“scatter”和“hexbin”。④改變參數(shù),重繪>>>df3=pd.DataFrame(np.random.randn(10,2),columns=['B','C']).cumsum()#累積值>>>df3['A']=pd.Series(list(range(len(df3))))#增加一列“A”#x軸為“A”列,創(chuàng)建子圖,圖類型為柱狀圖>>>df3.plot(subplots=True,kind='bar',x='A')Python基本圖形繪制——柱圖Python基本圖形繪制——柱圖
柱狀圖又稱長(zhǎng)條圖、條圖、條狀圖、棒形圖,是一種以長(zhǎng)方形的長(zhǎng)度為變量的統(tǒng)計(jì)圖表,由一系列高度不等的縱向長(zhǎng)方形表示數(shù)據(jù)分布的情況,用來(lái)比較兩個(gè)及以上的價(jià)值(不同時(shí)間或者不同條件),只有一個(gè)變量,通常用于較小的數(shù)據(jù)集分析。柱狀圖亦可橫向排列,或用多維方式表達(dá)。柱狀圖展示的是數(shù)值對(duì)比關(guān)系,可以通過(guò)柱狀的長(zhǎng)度表現(xiàn)哪些類別高,哪些類別低等情況。pandas中繪制柱狀圖可以用DataFrame.plot.bar()或Series.plot.bar()繪制,也可在DataFrame.plot()或Series.plot()方法中使用“kind=’bar’”參數(shù)設(shè)置進(jìn)行繪制。示例如下:>>>s=pd.Series(np.random.randn(10),index=list("abcdefghij"))>>>s.plot(kind='bar',alpha=0.5)#alpha表示透明度,取值范圍是0~1>>>plt.axhline(0,color='k')#在y=0處繪一條黑色的直線>>>plt.show()Python基本圖形繪制——柱圖Python基本圖形繪制——柱圖>>>s=pd.Series(np.random.randn(10),index=list("abcdefghij"))>>>s.plot(kind='barh',alpha=0.5)#水平柱形圖>>>plt.axvline(0,color='k')#在x=0處繪制一條黑色的直線>>>plt.show()水平柱狀圖Python基本圖形繪制——柱圖>>>df=pd.DataFrame(np.random.rand(6,4),index=['one','two','three','four','five','six'],columns=pd.Index(['A','B','C','D'],name='Genus'))>>>df.plot.bar()>>>plt.show()圖例設(shè)置了X軸刻度Python基本圖形繪制——柱圖>>>df=pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d'])>>>df.plot.bar(stacked=True,use_index=True)#疊加>>>plt.show()堆疊Python基本圖形繪制——柱圖
直方圖(histogram)是一種可以對(duì)值的頻率進(jìn)行離散化顯示的柱狀圖。數(shù)據(jù)點(diǎn)被拆分到離散的、間隔均勻的面元中,繪制的是各面元中數(shù)據(jù)點(diǎn)的數(shù)量。直方圖描述的是分類統(tǒng)計(jì)結(jié)果,即數(shù)據(jù)分布情況,一般用橫軸表示數(shù)據(jù)類型,縱軸表示分布情況。pandas中繪制直方圖可以用DataFrame.plot.hist()或Series.plot.hist()繪制,也可在DataFrame.plot()或Series.plot()方法中使用“kind=’hist’”參數(shù)設(shè)置進(jìn)行繪制。#隨機(jī)生成1~5之間的整數(shù)100個(gè)>>>data=pd.Series(np.random.randint(low=1,high=5,size=100))#生成直方圖,藍(lán)色,帶圖例,x軸為0~5>>>data.plot.hist(color='b',xticks=range(6),legend=True)>>>plt.show()Python基本圖形繪制——直方圖Python基本圖形繪制——直方圖>>>df4=pd.DataFrame({'a':np.random.randn(100)+1,'b':np.random.randn(100),},columns=['a','b'])#透明度為0.5,bins為顯示的柱子數(shù)目,本例分為30個(gè)區(qū)段,x軸為-3~4,rwidth設(shè)置柱子的寬度>>>df4.plot.hist(subplots=True,alpha=0.5,bins=30,xticks=range(-3,4),rwidth=0.8)>>>plt.show()Python基本圖形繪制——直方圖
散點(diǎn)圖通常是用來(lái)表述兩個(gè)連續(xù)變量之間的關(guān)系,圖中的每個(gè)點(diǎn)表示目標(biāo)數(shù)據(jù)集中的每個(gè)樣本。在回歸分析中,散點(diǎn)圖是數(shù)據(jù)點(diǎn)在直角坐標(biāo)系平面上的分布圖,表示因變量隨自變量而變化的大致趨勢(shì),據(jù)此可以選擇合適的函數(shù)對(duì)數(shù)據(jù)點(diǎn)進(jìn)行擬合。pandas中用DataFrame.plot.scatter()或DataFrame.plot(kind=’scatter’,…)方法來(lái)繪制。散點(diǎn)圖的繪制就是在圖上繪制(x,y)對(duì)應(yīng)的點(diǎn)。示例如下:>>>df=pd.DataFrame(np.random.rand(50,2),columns=['a','b'])#x軸“a”列,y軸為“b”列,s指定點(diǎn)的大小,為“b”列值的50倍>>>df.plot.scatter(x='a',y='b',s=df['b']*50)>>>plt.show()Python基本圖形繪制——散點(diǎn)圖散點(diǎn)圖必須指定“x”和“y”參數(shù)Python基本圖形繪制——散點(diǎn)圖>>>df=pd.DataFrame(np.random.rand(50,4),columns=['a','b','c','d'])#在單個(gè)軸上繪制多個(gè)列組,要用重復(fù)指定目標(biāo)軸的繪圖方法#建議指定顏色和標(biāo)簽關(guān)鍵字來(lái)區(qū)分每個(gè)組#指定目標(biāo)軸,3個(gè)圖都繪制在一個(gè)目標(biāo)軸上>>>ax=df.plot.scatter(x='a',y='b',color='DarkBlue',label='Group1')>>>df.plot.scatter(x='a',y='d',color='r',label='Group2',ax=ax)>>>df.plot.scatter(x='a',y='c',color='k',label='Group3',ax=ax)>>>plt.show()Python基本圖形繪制——散點(diǎn)圖
面積圖又稱區(qū)域圖,強(qiáng)調(diào)數(shù)量隨時(shí)間而變化的程度,也可用于引起人們對(duì)總值趨勢(shì)的注意。堆積面積圖和百分比堆積面積圖還可以顯示部分與整體的關(guān)系。pandas中可以使用Series.plot.area()和DataFrame.plot.area()或Series.plot(kind=’area’,…)和DataFrame.plot(kind=’area’,…)創(chuàng)建面積圖。>>>df=pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d'])#不堆疊,選取“a”、“b”兩列畫圖>>>df[['a','b']].plot.area(subplots=True,stacked=False)>>>plt.show()Python基本圖形繪制——面積圖Python基本圖形繪制——面積圖
餅圖顯示一個(gè)數(shù)據(jù)系列中各項(xiàng)的大小與各項(xiàng)總和的比例,可以直觀地比較各項(xiàng)的比例。pandas中用Series.plot.pie()和DataFrame.plot.pie()或者是Series.plot(kind=’pie’,…)和DataFrame.plot(kind=’pie’,…)來(lái)繪制。>>>s=pd.Series(np.random.rand(4),index=['a','b','c','d'],name='series')>>>s.plot.pie(figsize=(6,6))#設(shè)置圖的尺寸為6x6英寸,這樣餅圖是圓的>>>plt.show()Python基本圖形繪制——餅圖>>>s=pd.Series(np.random.rand(4))>>>
s.plot.pie(labels=['AA','BB','CC','DD'],colors=['r','g','b','c'],autopct='%.2f%%',fontsize=15,figsize=(6,6))>>>plt.show()Python基本圖形繪制——餅圖>>>df=pd.DataFrame(np.random.rand(4,2),index=['a','b','c','d'],columns=['x','y'])>>>df.plot.pie(subplots=True,figsize=(6,3))>>>plt.show()()Python基本圖形繪制——餅圖#繪制帶影子的分離餅圖>>>series=pd.Series(np.random.rand(4),index=['a','b','c','d'],name='series2')>>>series.plot.pie(figsize=(6,6),explode=[0.1,0,0.2,0],shadow=True)>>>plt.show()Python基本圖形繪制——餅圖密度圖是表現(xiàn)與數(shù)據(jù)值對(duì)應(yīng)的邊界或域?qū)ο蟮囊环N理論圖形表示方法。點(diǎn)密度圖用點(diǎn)(數(shù))來(lái)表現(xiàn)與數(shù)據(jù)值對(duì)應(yīng)的邊界或域?qū)ο?。一個(gè)域?qū)ο笾悬c(diǎn)的總個(gè)數(shù)代表了域?qū)?yīng)的數(shù)據(jù)值。如果某縣有10,000個(gè)高級(jí)市民,每個(gè)點(diǎn)代表100位高級(jí)市民,在這個(gè)縣的界線內(nèi)將會(huì)有100個(gè)點(diǎn)。對(duì)于每個(gè)點(diǎn)可以代表很大數(shù)值的原始數(shù)據(jù),用點(diǎn)密度圖是非常適合的。例如人口、快餐店個(gè)數(shù)、某種商標(biāo)的碳酸水的提供商個(gè)數(shù)等。其實(shí)密度圖,可利用數(shù)值出現(xiàn)頻率繪制的直方圖進(jìn)行曲線擬合,會(huì)得到密度圖;繪制的圖形是根據(jù)直方圖得到的條狀分布的頂點(diǎn)連接后得到的平滑曲線,X軸是DataFrame中的數(shù)值分布,Y軸是密度(Density)。pandas中用Series.plot.density()和DataFrame.plot.density()方法、Series.plot(kind=’density’,…)和DataFrame.plot(kind=’density’,…)方法、Series.plot.kde()和DataFrame.plot.kde()方法、Series.plot(kind=’kde’,…)和DataFrame.plot(kind=’kde’,…)方法繪制。>>>s=pd.Series([1,2,2.5,3,3.5,4,5,3,3,5,4,4,5,6,5,4,6,3,2,5,4,3,5])>>>s.plot.density()>>>plt.show()Python基本圖形繪制——密度圖Python基本圖形繪制——密度圖>>>length=pd.DataFrame({'length':[10,20,15,10,1,12,12,12,13,13,13,14,14,14,51,51,51,51,51,4,4,4,4],"high":[23,45,67,43,44,34,54,22,3,4,3,45,34,43,43,5,54,32,21,32,12,32,43]})>>>length.plot(kind=’kde’)>>>plt.show()Python基本圖形繪制——密度圖3pandas基本圖形繪制目錄matplotlib繪圖2Python可視化與可視化工具介紹1matplotlib.pyplot的使用4項(xiàng)目實(shí)戰(zhàn)5單元小結(jié)6matplotlib是Python中最常用的可視化工具之一,可以非常方便地創(chuàng)建各種類型的2D圖表和一些基本的3D圖表。它支持輸出多種格式的圖形圖像,并且可以使用多種GUI界面庫(kù)交互式地顯示圖表。matplotlib可用于Python腳本、Pythonshell、iPython等開發(fā)環(huán)境,其子模塊pyplot提供了經(jīng)典Python編程接口。本節(jié)主要介紹交互式繪圖模式。matplotlib模塊概述matplotlib交互式繪圖的步驟如下:導(dǎo)入子模塊:import
matplotlib.pyplot
as
plt。創(chuàng)建畫布:fig=plt.figure()。添加分區(qū):ax=fig.add_subplot(311)。
關(guān)于分區(qū)(子圖),是這樣的規(guī)則。整個(gè)畫布可以等分為m行n列個(gè)子區(qū)域,然后按照從左到右,從上到下的順序?qū)γ總€(gè)子區(qū)域進(jìn)行編號(hào),左上的子區(qū)域編號(hào)為1。如果行、列和子圖數(shù)這三個(gè)數(shù)都小于10,可以把它們縮寫為一個(gè)整數(shù),例如(323)和(3,2,3)是相同的。如fig.add_subplot(311)表示分成3行1列,占用第1個(gè)位置,即添加到第1行第1列的子區(qū)域中,fig.add_subplot(222)表示分成2行2列,占用第2個(gè)位置,即添加到第1行第2列的子區(qū)域中。設(shè)置x軸最小、最大值,y軸最小、最大值:ax.axis([-5,5,0,1])。添加標(biāo)題:plt.title('thisisatitle')
。坐標(biāo)軸添加標(biāo)題:plt.xlabel('x')、plt.ylabel('y')。畫圖:ax.scatter(x,y)。顯示圖形:plt.show()。matplotlib繪圖基礎(chǔ)1.交互繪圖模式的基本命令打開交互繪圖模式:plt.ion()關(guān)閉交互繪圖模式:plt.ioff()清當(dāng)前坐標(biāo)軸:plt.cla()清除所有子圖:plt.clf()關(guān)閉畫布(窗口):plt.close()2.繪圖>>>importmatplotlib.pyplotasplt>>>importnumpyasnp>>>importpandasaspd>>>plt.ion()#打開交互模式>>>fig=plt.figure(figsize=(10,10))#創(chuàng)建畫布,尺寸為10x10>>>ax=fig.add_subplot(2,2,1)#添加子圖1>>>s=pd.Series(20*np.random.rand(10))#把隨機(jī)數(shù)放大20倍>>>s.plot(ax=ax,color='r',linestyle='--')matplotlib交互繪圖折線繪制在位于畫布的左上位置的子圖內(nèi),用紅色的虛線顯示>>>ax=fig.add_subplot(222)#添加子圖2>>>s.plot.bar()#畫柱圖>>>ax=fig.add_subplot(223)#添加子圖3>>>df.plot.scatter(x='x',y='y',ax=ax)#繪制散點(diǎn)圖>>>ax=fig.add_subplot(224)#添加子圖4>>>s.plot.pie(ax=ax)#繪制餅圖交互繪圖模式操作過(guò)程中,如果當(dāng)前子圖所繪圖形有誤,可以用plt.cla()方法清除所繪圖形,可以用plt.clf()方法清除畫布所有子圖,用plt.close()方法關(guān)閉當(dāng)前畫布。退出交互繪圖模式,用plt.ioff()方法。【例11-1】在交互繪圖模式下模擬某物體的運(yùn)行軌跡。#ch11_1.pyimportmatplotlib.pyplotaspltimportnumpyasnpimportmath
plt.close()#關(guān)閉窗口fig=plt.figure()ax=fig.add_subplot(1,1,1)ax.axis("equal")#設(shè)置圖像顯示的時(shí)候xy軸比例相同plt.grid(True)#添加網(wǎng)格plt.ion()#打開交互模式IniObsX=0000#設(shè)置x的初始值IniObsY=4000#設(shè)置y的初始值IniObsAngle=135#初始角度IniObsSpeed=10*math.sqrt(2)#初始速度print('開始仿真')try:fortinrange(50):#某物體的運(yùn)行軌跡obsX=IniObsX+IniObsSpeed*math.sin(IniObsAngle/180*math.pi)*tobsY=IniObsY+IniObsSpeed*math.cos(IniObsAngle/180*math.pi)*tax.scatter(obsX,obsY,c='b',marker="*")#散點(diǎn)圖plt.pause(0.5)#延時(shí)0.5秒exceptExceptionaserr:print(err)3pandas基本圖形繪制目錄matplotlib繪圖2Python可視化與可視化工具介紹1matplotlib.pyplot的使用4項(xiàng)目實(shí)戰(zhàn)5單元小結(jié)6matplotlib的pyplot子庫(kù)提供了很多繪圖API,方便用戶快速繪制2D圖表。matplotlib.pyplot是命令行式函數(shù)的集合,每一個(gè)函數(shù)都對(duì)圖像作了修改,比如創(chuàng)建圖形,在圖像上創(chuàng)建畫圖區(qū)域,在畫圖區(qū)域上畫線,在線上標(biāo)注等。matplotlib.pyplot子庫(kù)簡(jiǎn)介importnumpyasnpimportpandasaspdimportmatplot.pyplotasplt繪圖準(zhǔn)備1.plt.plot()方法plt.plot()方法是一個(gè)基本的繪制折線方法。常用的格式如下:plot([x],y,[fmt],**kwargs)#畫單條折線plot([x],y,[fmt],[x2],y2,[fmt2],...,**kwargs)#畫多條折線[x],y:用于畫線的點(diǎn)。[x]省略時(shí),默認(rèn)從0開始;[fmt]:格式字符串,按顏色、點(diǎn)標(biāo)記和線型順序組合,如“ro.”,當(dāng)然也可分別用“l(fā)inestyle='.',color='r',marker='o’”關(guān)鍵參數(shù)格式表示。顏色、線型同6.2.1中所講的顏色和線型;點(diǎn)的標(biāo)記有“.”表示實(shí)心的點(diǎn),“o”表示空心的點(diǎn),“v”表示倒三角形,“^”表示正三角形等共22種;**kwargs
:用來(lái)設(shè)置圖形屬性的選項(xiàng),如“l(fā)inewidth=2”表示線寬為2,“alpha=0.5”表示透明度為0.5等。隨著使用的需要,不斷熟悉多種選項(xiàng)參數(shù),也可用help(plt.plot)查看。
matplotlib.pyplot繪圖基礎(chǔ)2.其它屬性設(shè)置方法設(shè)置圖的標(biāo)題:plt.title('Myfirstplot',fontsize=20,fontname='TimesNewRoman'),定義圖表的標(biāo)題為“Myfirstplot”,并設(shè)置標(biāo)題的字號(hào)和字體。設(shè)置x軸標(biāo)簽:plt.xlabel('counting',color='gray'),定義x軸標(biāo)簽為“counting”,顏色為gray。設(shè)置y軸標(biāo)簽:plt.ylabel('Squarevalues',color='gray'),同上。設(shè)置顯示文本:plt.text(5,0.5,'$y=sin(x)$',fontsize=20,bbox={'facecolor':'yellow','alpha':0.2}),在圖(5,0.5)位置添加“y=sin(x)”文本,并設(shè)置文本的字號(hào),并將文本放入文本框。text()方法支持放在兩個(gè)$符號(hào)之間的數(shù)學(xué)表達(dá)式。設(shè)置網(wǎng)格線:plt.grid(True),“True”表示顯示網(wǎng)格線。設(shè)置圖例:plt.legend(['First','Second','Third'],loc=1),loc是圖例放置位置,默認(rèn)值為1即圖表的右上角。當(dāng)圖表中有多個(gè)序列線條時(shí),圖例的順序要與調(diào)用plot()函數(shù)順序一致。保存圖表:plt.savefig('/usr/plot.png'),圖表以png的格式保存到usr目錄下,方便其它文件使用這個(gè)圖表。但是需要注意的是savefig()函數(shù)需要放在生成圖表的一系列命令最后,否則會(huì)得到一個(gè)空白的文件。設(shè)置繪圖區(qū)域:plt.subplot(211)。設(shè)置x,y軸的比例:plt.axis('equal')。matplotlib.pyplot繪圖基礎(chǔ)【例11-2】pyplot繪圖樣例。#ch11_2.pyimportmatplotlib.pyplotaspltimportnumpyasnpplt.grid(True)x=np.arange(0,5,0.1)y1=np.sin(x)y2=np.sin(x+4)plt.subplot(211)plt.plot(x,y1,'b-')plt.legend(['Firsts'],loc=1)plt.subplot(212)plt.plot(x,y2,'g^')plt.legend(['Seconds'],loc=1)plt.savefig('/usr/plot.png')plt.show()matplotlib.pyplot繪圖基礎(chǔ)【例11-2】pyplot繪圖樣例。#ch11_2.pyimportmatplotlib.pyplotaspltimportnumpyasnpplt.grid(True)x=np.arange(0,5,0.1)y1=np.sin(x)y2=np.sin(x+4)plt.subplot(211)plt.plot(x,y1,'b-')plt.legend(['Firsts'],loc=1)plt.subplot(212)plt.plot(x,y2,'g^')plt.legend(['Seconds'],loc=1)plt.savefig('/usr/plot.png')plt.show()如何修改?matplotlib.pyplot繪圖基礎(chǔ)【例11-3】隨機(jī)生成7個(gè)0~100之間的值作為”星期一~星期天”的值,繪制柱狀圖。#ch11-3.py#coding:utf-8importmatplotlib.pyplotaspltimportnumpyasnpimportmatplotlibasmpl#顯示中文,設(shè)置中文字體zhfont1=mpl.font_manager.FontProperties(fname='/usr/share/fonts/truetype/arphic/ukai.ttc')#windows環(huán)境用此語(yǔ)句顯示中文#mpl.rcParams[self.defaultFamily[fontext])]=['simpliFied']x=np.arange(7)data=np.random.randint(0,100,7)colors=np.random.rand(7*3).reshape(7,3)#隨機(jī)生成7種顏色組合labels=['星期一','星期二','星期三','星期四','星期五','星期六','星期天']plt.title("星期圖",fontproperties=zhfont1)plt.xticks(x,labels,fontproperties=zhfont1)plt.bar(x,data,alpha=0.8,color=colors)plt.show()matplotlib.pyplot繪制柱形圖plt.barh()方法是繪制水平柱狀圖matplotlib.pyplot繪制柱形圖pyplot用于繪制直方圖的方法為hist(),該方法除了繪制直方圖外,還以元組形式返回直方圖的計(jì)算結(jié)果。它能夠接收一系列樣本個(gè)體和期望的分組數(shù)量作為參數(shù),會(huì)把樣本范圍分成多個(gè)區(qū)間,然后計(jì)算每個(gè)區(qū)間所包含的樣本個(gè)體的數(shù)量。hist()原型如下:hist(x,bins=None,range=None,density=None,weights=None,cumulative=False,bottom=None,histtype='bar',align='mid',orientation='vertical',rwidth=None,log=False,color=None,label=None,stacked=False,normed=None,hold=None,data=None,**kwargs)x:輸入的數(shù)據(jù),可以為一個(gè)序列數(shù),也可以多組;bins:直方圖中分組個(gè)數(shù);range:指定分組區(qū)間的上下限,默認(rèn)為(x.min(),x.max()),若bins為序列,range失效;density:決定hist()方法返回值的第一個(gè)輸出元組n。如果為True,直方圖面積和為1,頻數(shù)/(總數(shù)*組距);如果為False,返回的是頻數(shù);normed:決定直方圖y軸取值是落在某個(gè)面元中元素的個(gè)數(shù)(normed=False或normed=0),還是某個(gè)面元中元素的個(gè)數(shù)占總體的百分比(normed=True或normed=1);cumulative:為True即計(jì)算累計(jì)頻數(shù)或頻率。即cumulative=True,density=True時(shí),計(jì)算累計(jì)頻率;bottom:如果是標(biāo)量,每個(gè)bin的基線位置都平移相同的單位。如果是與分組區(qū)間數(shù)長(zhǎng)度相同的列表,則每個(gè)bin的基線都獨(dú)立地平移獨(dú)立的單位,默認(rèn)為0;histtype:表明畫出的圖形狀,可以是“bar”、“barstacked”、“step”、“stepfilled”;align:設(shè)置畫的bar是以什么為中心,可以是“l(fā)eft”、“mid”、“right”;rwidth:控制每個(gè)bar的寬度。weights:權(quán)重,與x的形狀一致;barstacked,表示有多個(gè)分組的直方圖時(shí),是否堆疊放置;log:控制y坐標(biāo)是否使用科學(xué)計(jì)數(shù)法;orientation
:直方圖是垂直還是水平的,可以是“horizontal”、“vertical”。hist()的返回值:n:數(shù)組或數(shù)組列表每一個(gè)bar區(qū)間的數(shù)量或者百分比;bins:數(shù)組,bar的范圍和bins參數(shù)含義一樣;patches:列表或者列表的列表,圖形對(duì)象。matplotlib.pyplot繪制直方圖【例11-4】隨機(jī)生成一個(gè)序列作為樣本,畫出它的直方圖。把隨機(jī)生成的100個(gè)0~100之間的樣本數(shù)據(jù)作為參數(shù)傳遞給hist()方法,創(chuàng)建一個(gè)直方圖,指定直方圖中有20個(gè)面元。#ch11_4.pyimportmatplotlib.pyplotaspltimportnumpyasnpdata=np.random.randint(0,100,100)n,bins,patches=plt.hist(data,bins=20,rwidth=0.6)print(data)print(n)print(bins)print(patches)plt.show()matplotlib.pyplot繪制直方圖matplotlib.pyplot繪制直方圖【例11-5】多種參數(shù)組合的直方圖示例。#ch11_5.pyimportnumpyasnpimportmatplotlibimportmatplotlib.pyplotaspltimportrandombottom=[1,1,2,3]data=[]random.seed(123456)forxinrange(20):data.append(random.randint(1,5))np.random.seed(20240408)weight=np.random.rand(20)ax=plt.subplot(331)plt.hist(data,bins=4,histtype='bar',rwidth=0.8)ax.set_title("bins=4,histtype='bar',rwidth=0.8",fontsize=6)ax=plt.subplot(332)plt.hist(data,bins=5,rwidth=0.1)ax.set_title("bins=5,rwidth=0.1",fontsize=6)ax=plt.subplot(333)ax.set_title("bins=5,rwidth=0.3,density=True",fontsize=6)plt.xlabel(u'數(shù)量',fontsize=4)plt.ylabel(u'占比',fontsize=4)n,edgeBin,patches=plt.hist(data,bins=5,rwidth=0.3,density=True)#n,edgeBin,patches=plt.hist(data,bins=5,histtype='bar',rwidth=0.8)print(n)print(edgeBin)ax=plt.subplot(334)ax.set_title("bins=5,rwidth=0.3,density=True,weights=weight",fontsize=6)n,edgeBin,patches=plt.hist(data,bins=5,rwidth=0.3,density=True,weights=weight)#n,edgeBin,patches=plt.hist(data,bins=5,rwidth=0.3,weights=weight)print(n)print(edgeBin)matplotlib.pyplot繪制直方圖ax=plt.subplot(335)ax.set_title("bins=4,rwidth=0.3,bottom=bottom",fontsize=6)plt.hist(data,bins=4,rwidth=0.3,bottom=bottom)ax=plt.subplot(336)ax.set_title("bins=4,rwidth=0.3,histtype='stepfilled'",fontsize=6)#plt.hist(data,bins=4,rwidth=0.8,histtype='barstacked')#plt.hist(data,bins=4,rwidth=0.8,histtype='step')plt.hist(data,bins=4,rwidth=0.3,histtype='stepfilled')colors="rgmbc"ax=plt.subplot(337)ax.set_title("bins=4,rwidth=0.3",fontsize=6)n,edgeBin,patches=plt.hist(data,bins=4,rwidth=0.3)random.seed()forpatchinpatches:patch.set_facecolor(random.choice(colors))label="Label"ax=plt.subplot(338)ax.set_title("bins=4,rwidth=0.3,label=label",fontsize=6)plt.hist(data,bins=4,rwidth=0.3,label=label)plt.legend(fontsize=12)ax=plt.subplot(339)ax.set_title("bins=4,rwidth=0.3,log=True,cumulative=True",fontsize=6)n,edgeBin,patches=plt.hist(data,bins=4,rwidth=0.3,log=True,cumulative=True)print(n)print(edgeBin)fig=plt.gcf()fig.set_size_inches(12,10)fig.savefig("hist.png")plt.show()matplotlib.pyplot繪制直方圖matplotlib.pyplot繪制直方圖繪制餅圖,用pie()方法。pie()原型如下:pie(x,explode=None,labels=None,colors=None,autopct=None,pctdistance=0.6,shadow=False,labeldistance=1.1,startangle=None,radius=None,counterclock=True,wedgeprops=None,textprops=None,center=(0,0),frame=False,rotatelabels=False,hold=None,data=None)x:指定繪圖的數(shù)據(jù);explode:指定餅圖某些部分的突出顯示,即呈現(xiàn)爆炸式;labels:為餅圖添加標(biāo)簽說(shuō)明,類似于圖例說(shuō)明;colors:指定餅圖的填充色;autopct:自動(dòng)添加百分比顯示,可以采用格式化的方法顯示;pctdistance:設(shè)置百分比標(biāo)簽與圓心的距離;shadow:是否添加餅圖的陰影效果;labeldistance:設(shè)置各扇形標(biāo)簽(圖例)與圓心的距離;startangle:設(shè)置餅圖的初始擺放角度;radius:設(shè)置餅圖的半徑大?。籧ounterclock:是否讓餅圖按逆時(shí)針順序呈現(xiàn);wedgeprops:設(shè)置餅圖內(nèi)外邊界的屬性,如邊界線的粗細(xì)、顏色等;textprops:設(shè)置餅圖中文本的屬性,如字體大小、顏色等;center:指定餅圖的中心點(diǎn)位置,默認(rèn)為原點(diǎn);frame:是否要顯示餅圖背后的圖框,如果設(shè)置為True的話,需要同時(shí)控制圖框x軸、y軸的范圍和餅圖的中心位置。matplotlib.pyplot繪制餅圖【例11-6】隨機(jī)生成7個(gè)值代表一個(gè)星期每一天的值,繪制一個(gè)星期的餅圖。#ch11_6.pyimportmatplotlib.pyplotaspltimportnumpyasnpimportmatplotlibasmpl#顯示中文設(shè)置zhfont1=mpl.font_manager.FontProperties(fname='/usr/share/fonts/truetype/arphic/ukai.ttc')data=np.arange(1,8)labels=['星期一','星期二','星期三','星期四','星期五','星期六','星期天']colors=np.random.rand(7*3).reshape(7,-1)#隨機(jī)生成每一塊的顏色的代碼explode=[0.5,0,0,0,0,0,0]plt.pie(data,labels=labels,textprops={'fontsize':12,'color':'black','fontproperties':zhfont1},colors=colors,startangle=0,autopct='%1.2f%%',explode=explode,shadow=True)plt.axis('equal')plt.show()matplotlib.pyplot繪制餅圖散點(diǎn)圖由一些散亂的點(diǎn)組成的圖,由其x值和y值確定其位置。利用散點(diǎn)圖可以展示數(shù)據(jù)的分布和聚合情況。使用scatter()方法來(lái)繪制散點(diǎn)圖。scatter()原型如下: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)x,y:輸入數(shù)據(jù),長(zhǎng)度相同的序列;c:顏色序列;s:設(shè)置點(diǎn)的大??;marker:設(shè)置點(diǎn)的形狀;cmap:指定色圖,只有當(dāng)c參數(shù)是一個(gè)浮點(diǎn)型的數(shù)組時(shí)才起作用;norm:設(shè)置數(shù)據(jù)亮度,標(biāo)準(zhǔn)化到0~1之間,使用該參數(shù)仍需要c為浮點(diǎn)型的數(shù)組;linewidths:設(shè)置線寬;edgecolors:設(shè)置點(diǎn)的邊緣顏色;vmin,vmax:亮度設(shè)置,與norm類似,如果使用了norm則該參數(shù)無(wú)效。matplotlib.pyplot繪制散點(diǎn)圖【例11-7】散點(diǎn)圖示例。#ch11_7.py
importmatplotlib.pyplotaspltimportnumpyasnpimportmatplotlibasmplzhfont1=mpl.font_manager.FontProperties(fname='/usr/share/fonts/truetype/arphic/ukai.ttc')plt.figure(figsize=(9,6))n=1000x=np.random.rand(1,n)y=np.random.rand(1,n)c=np.random.rand(1,n)plt.title('散點(diǎn)圖',fontproperties=zhfont1)plt.xlabel('x值',fontproperties=zhfont1)plt.ylabel('y值',fontproperties=zhfont1)plt.grid(True)plt.scatter(x,y,s=50*y,c=c,alpha=0.4,marker='o',vmin=1,vmax=1000,linewidths=3,edgecolors="red")plt.show()
箱線圖又稱箱形圖或盒式圖。在不明確數(shù)據(jù)分析的目標(biāo)時(shí),對(duì)數(shù)據(jù)進(jìn)行一些探索性的分析,通過(guò)箱線圖可以知道數(shù)據(jù)的中心位置,發(fā)散程度以及偏差程度。使用boxplot()方法繪制箱形圖。【例11-8】基本箱線圖的示例。#ch11_8.pyimportnumpyasnpimportmatplotlib.pyplotaspltimportpandasaspds=np.random.rand(15)*20#把數(shù)據(jù)擴(kuò)大20倍plt.boxplot(s)print(s)plt.show()[5.391493246.7703543213.2174980513.223700217.177212560.731327460.234854644.7138568614.758472262.151712611.867726182.9883708417.855461568.372233578.56542829]下邊緣Q1,表示最小值;下四分位數(shù)Q2,等于該樣本中所有數(shù)值由小到大排列后的第25%的數(shù)字;中位數(shù)Q3,等于該樣本中所有數(shù)值由小到大排列后的第50%的數(shù)字;上四分位數(shù)Q4,等于該樣本中所有數(shù)值由小到大排列后的第75%的數(shù)字;上邊緣Q5表示最大值。Q4-Q2為四分位差,上邊緣和下邊緣是距離中位數(shù)1.5倍四分位差的線,即Q5=Q4+1.5(Q4-Q2),Q1=Q2-1.5(Q4-Q2)。如果有數(shù)字落在上下邊緣之外,則稱之為異常值。boxplot()原型為:boxplot(x,notch=None,sym=None,vert=None,whis=None,positions=None,widths=None,patch_artist=None,bootstrap=None,usermedians=None,conf_intervals=None,meanline=None,showmeans=None,showcaps=None,showbox=None,showfliers=None,boxprops=None,labels=None,flierprops=None,medianprops=None,meanprops=None,capprops=None,whiskerprops=None,manage_xticks=True,autorange=False,zorder=None,hold=None,data=None)x:指定要繪制箱線圖的數(shù)據(jù);notch:是否是凹口的形式展現(xiàn)箱線圖,默認(rèn)非凹口;sym:指定異常點(diǎn)的形狀;vert:是否需要將箱線圖垂直擺放,默認(rèn)垂直擺放;whis:指定上下邊緣與上下四分位的距離,默認(rèn)為1.5倍的四分位差;positions:指定箱線圖的位置,默認(rèn)為[0,1,2…];widths:指定箱線圖的寬度,默認(rèn)為0.5;patch_artist:是否填充箱體的顏色;meanline:是否用線的形式表示均值,默認(rèn)用點(diǎn)來(lái)表示;showmeans:是否顯示均值,默認(rèn)不顯示;showcaps:是否顯示箱線圖頂端和末端的兩條線,默認(rèn)顯示;showbox:是否顯示箱線圖的箱體,默認(rèn)顯示;showfliers:是否顯示異常值,默認(rèn)顯示;boxprops:設(shè)置箱體的屬性,如邊框色,填充色等;labels:為箱線圖添加標(biāo)簽,類似于圖例的作用;filerprops:設(shè)置異常值的屬性,如異常點(diǎn)的形狀、大小、填充色等;medianprops:設(shè)置中位數(shù)的屬性,如線的類型、粗細(xì)等;meanprops:設(shè)置均值的屬性,如點(diǎn)的大小、顏色等;capprops:設(shè)置箱線圖頂端和末端線條的屬性,如顏色、粗細(xì)等;whiskerprops:設(shè)置須的屬性,如顏色、粗細(xì)、線的類型等。箱線圖【例11-9】二維數(shù)據(jù)繪制箱線圖。#ch11_9.pyimportnumpyasnpimportmatplotlib.pyplotaspltimportpandasaspdnp.random.seed(2)#設(shè)置隨機(jī)種子#生成0-50之間的5*4維度數(shù)據(jù)df=pd.DataFrame(np.random.rand(5,4)*50,columns=['A','B','C','D'])print(df)#輸出初始數(shù)據(jù)df=df.T#轉(zhuǎn)置,以用于生成箱線圖print(df)#輸出轉(zhuǎn)置結(jié)果plt.boxplot(x=df,showmeans=True,patch_artist=True,whis=3,labels=['A','B','C','D'])plt.show()ABCD021.7997451.29631227.48312421.766120121.01839016.51674110.23243230.963548214.98273413.34136431.05669226.45710536.72899725.6789069.22199339.266757442.69876524.71184242.3280743.98227401234A21.79974521.01839014.9827346.72899742.698765B1.29631216.51674113.34136425.67890624.711842C27.48312410.23243231.0566929.22199342.328074D21.76612030.96354826.45710539.2667573.982274A、C組分布偏左,B組偏右A、D組數(shù)據(jù)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 培訓(xùn)機(jī)構(gòu)工作制度匯編
- 員工參加培訓(xùn)時(shí)公司制度
- 攀巖保護(hù)人員培訓(xùn)制度
- 衛(wèi)生院對(duì)村醫(yī)培訓(xùn)制度
- 培訓(xùn)機(jī)構(gòu)返利制度及流程
- 駕校教練培訓(xùn)制度
- 培訓(xùn)督導(dǎo)檢查制度
- 員工轉(zhuǎn)崗及轉(zhuǎn)崗培訓(xùn)制度
- 農(nóng)業(yè)培訓(xùn)安全管理制度
- 華為手機(jī)培訓(xùn)管理制度
- 2025年國(guó)家開放大學(xué)《管理學(xué)基礎(chǔ)》期末機(jī)考題庫(kù)附答案
- 2025年人民網(wǎng)河南頻道招聘?jìng)淇碱}庫(kù)參考答案詳解
- ESHRE子宮內(nèi)膜異位癥的診斷與治療指南(2025年)
- 2025核電行業(yè)市場(chǎng)深度調(diào)研及發(fā)展趨勢(shì)與商業(yè)化前景分析報(bào)告
- 急驚風(fēng)中醫(yī)護(hù)理查房
- 營(yíng)地合作分成協(xié)議書
- GB/T 70.2-2025緊固件內(nèi)六角螺釘?shù)?部分:降低承載能力內(nèi)六角平圓頭螺釘
- 基于視頻圖像的大型戶外場(chǎng)景三維重建算法:挑戰(zhàn)、創(chuàng)新與實(shí)踐
- 物流管理畢業(yè)論文范文-物流管理畢業(yè)論文【可編輯全文】
- 2025年四川省高職單招模擬試題語(yǔ)數(shù)外全科及答案
- 2025年江蘇事業(yè)單位教師招聘體育學(xué)科專業(yè)知識(shí)考試試卷含答案
評(píng)論
0/150
提交評(píng)論