《Python大數(shù)據(jù)基礎(chǔ)》課件-7.Python大數(shù)據(jù)可視化_第1頁(yè)
《Python大數(shù)據(jù)基礎(chǔ)》課件-7.Python大數(shù)據(jù)可視化_第2頁(yè)
《Python大數(shù)據(jù)基礎(chǔ)》課件-7.Python大數(shù)據(jù)可視化_第3頁(yè)
《Python大數(shù)據(jù)基礎(chǔ)》課件-7.Python大數(shù)據(jù)可視化_第4頁(yè)
《Python大數(shù)據(jù)基礎(chǔ)》課件-7.Python大數(shù)據(jù)可視化_第5頁(yè)
已閱讀5頁(yè),還剩82頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

數(shù)據(jù)可視化基礎(chǔ)使用Matplotlib繪圖使用Matplotlib繪制常見圖表進(jìn)階功能如何畫出更好的圖閱讀材料目錄數(shù)據(jù)可視化是展示數(shù)據(jù)分析結(jié)果的重要手段。本章首先介紹數(shù)據(jù)可視化的基礎(chǔ)和常見的圖表類型,然后介紹如何使用Python繪制不同類型的圖表,最后結(jié)合幾個(gè)具體的場(chǎng)景,選擇合適的圖表并展現(xiàn)出來(lái)。數(shù)據(jù)可視化旨在提高對(duì)數(shù)據(jù)的理解并作出正確的決策。Python有很多數(shù)據(jù)可視化的工具包,也有很多統(tǒng)計(jì)建模和數(shù)據(jù)分析工具。本章先介紹Matplotlib,然后講如何利用其進(jìn)行基礎(chǔ)繪圖,從而在此基礎(chǔ)上進(jìn)行大數(shù)據(jù)的可視化。大數(shù)據(jù)可視化數(shù)據(jù)可視化是一個(gè)新術(shù)語(yǔ),它不僅通過圖表展示數(shù)據(jù),更使用直觀的方式將數(shù)據(jù)背后的信息展現(xiàn)出來(lái)。相對(duì)于大量的原始數(shù)據(jù),人類可以快速理解數(shù)據(jù)可視化后的圖表表達(dá)的信息。目前成熟的圖表已超過30種,每種圖表有特定的實(shí)用場(chǎng)景和特點(diǎn)。數(shù)據(jù)有多種展示的方式,不同的展示方式突出的重點(diǎn)不同。下面是我們常用的幾種圖表:一、數(shù)據(jù)可視化基礎(chǔ)圖表類型使用場(chǎng)景例子折線圖展示數(shù)據(jù)隨時(shí)間或有序類別的波動(dòng)情況的趨勢(shì)變化?某學(xué)生最近30天每日步行數(shù)?股票每日收盤價(jià)直方圖分布分析展示數(shù)值在區(qū)間范圍內(nèi)的分布,可反映分類項(xiàng)目之間的比較,也可以用來(lái)反映時(shí)間趨勢(shì)?比較同一個(gè)班的學(xué)生在家庭作業(yè)、期中考試、期末考試和全部課程成績(jī)的得分分布散點(diǎn)圖研究不同變量間的關(guān)系?男性與女性人群中不同年齡階段得皮膚病的可能性?IQ測(cè)試得分和學(xué)習(xí)成績(jī)之間的相關(guān)性餅圖在一個(gè)空間或圖上展示比例,展示不同部分所占百分比?調(diào)查中的相應(yīng)分類?一種特定技術(shù)的前五家公司的市場(chǎng)份額一、數(shù)據(jù)可視化基礎(chǔ)圖表類型使用場(chǎng)景例子氣泡圖用于展示三個(gè)變量之間的關(guān)系,橫縱中表示其中兩個(gè)變量,第三個(gè)變量用氣泡的大小表示?對(duì)比多種磁盤的性能,價(jià)格和銷量。x軸表示價(jià)格,y軸表示性能,氣泡大小表示銷量核密度估計(jì)圖估計(jì)概率密度函數(shù)(非參數(shù)檢驗(yàn)方法)?股票、金融等風(fēng)險(xiǎn)預(yù)測(cè)樹狀圖與組織結(jié)構(gòu)有關(guān)的分析,即有明確的層次關(guān)系的數(shù)據(jù)?展示企業(yè)組織結(jié)構(gòu)小提琴圖展示數(shù)值在區(qū)間范圍內(nèi)的分布?不同性別對(duì)應(yīng)的消費(fèi)額一、數(shù)據(jù)可視化基礎(chǔ)一、數(shù)據(jù)可視化基礎(chǔ)選擇正確的圖表和繪制技巧需要大量的練習(xí)和對(duì)比。有效的數(shù)據(jù)可視化有助于理解數(shù)據(jù)或傳遞信息。數(shù)據(jù)可視化的過程也需要對(duì)數(shù)據(jù)進(jìn)行分析和提取,通過對(duì)數(shù)據(jù)的分析展現(xiàn)出其統(tǒng)計(jì)信息或隱藏的信息。數(shù)據(jù)可視化是數(shù)據(jù)分析后的一個(gè)過程,但是通常數(shù)據(jù)分析和數(shù)據(jù)可視化過程常常是交互進(jìn)行的。數(shù)據(jù)可視化的主要原則是根據(jù)目標(biāo)讀者的需求,結(jié)合通過分析數(shù)據(jù)能展示的問題,采用能精確呈現(xiàn)數(shù)據(jù)的特征的圖表進(jìn)行可視化。一、數(shù)據(jù)可視化基礎(chǔ)從數(shù)據(jù)制作圖表的過程可以知道,首先,需要對(duì)數(shù)據(jù)進(jìn)行分析,明確需要表達(dá)的信息和主題;根據(jù)要展示的信息選擇圖表類型,選擇全部或部分?jǐn)?shù)據(jù)展示在圖表中,最后將制作圖表并對(duì)圖表進(jìn)行美化,確認(rèn)圖表表達(dá)了預(yù)期的主題。應(yīng)用統(tǒng)計(jì)圖表的目的是能夠準(zhǔn)確、直觀地反映一組數(shù)據(jù)所蘊(yùn)含的信息,幫助人們迅速地解讀數(shù)據(jù)。對(duì)于同一組數(shù)據(jù),有時(shí)可以畫出不同的統(tǒng)計(jì)圖,但不是任何一種統(tǒng)計(jì)圖都能準(zhǔn)確而直觀地反映數(shù)據(jù)所表達(dá)的信息,因此要根據(jù)調(diào)查的目的和數(shù)據(jù)的特點(diǎn)選擇適當(dāng)?shù)慕y(tǒng)計(jì)圖。一、數(shù)據(jù)可視化基礎(chǔ)例:中科院動(dòng)物所研究不同品種奶牛的產(chǎn)奶量和其中的蛋白質(zhì)含量。目前有六種奶牛,研究人員統(tǒng)計(jì)了六種奶牛一周的平均產(chǎn)奶量,并分別用餅圖,折線圖,直方圖表示。一、數(shù)據(jù)可視化基礎(chǔ)例子中共使用了餅圖,折線圖和直方圖三種形式表示數(shù)據(jù)。根據(jù)不同統(tǒng)計(jì)圖的特點(diǎn),可以發(fā)現(xiàn)餅圖反應(yīng)了六種奶牛在總體中所占百分比的大小,沒有反映出六種奶牛的平均產(chǎn)奶量;折線圖雖然也反映六種奶牛的產(chǎn)奶量,但更主要的是反映了六種牛奶的變化趨勢(shì);直方圖更直觀地反映了六種奶牛的產(chǎn)奶量。通過調(diào)整坐標(biāo)軸或標(biāo)注會(huì)給人誤導(dǎo),這種由統(tǒng)計(jì)圖表調(diào)整造成的誤導(dǎo)具有一定的“隱蔽性”。例如將直方圖1改為直方圖2。通過將y軸的起始數(shù)值改為5,品種A的產(chǎn)奶量感覺是品種B的6倍。這也是一些論文中突出優(yōu)化效果的一種花招。數(shù)據(jù)本身并不能確定圖表類型,更重要的是通過數(shù)據(jù)表達(dá)的觀點(diǎn)。選擇圖表類型有一定的技巧和原則,但是對(duì)于特定的問題需要獨(dú)立分析。美國(guó)專家AndrewAbela整理了一張圖表類型選擇指南。他根據(jù)需要表達(dá)的主題將圖分為比較、分布、構(gòu)成、聯(lián)系四類。在每種類別下,根據(jù)不同情況選擇不同的圖表進(jìn)行展示。一、數(shù)據(jù)可視化基礎(chǔ)一、數(shù)據(jù)可視化基礎(chǔ)同樣的數(shù)據(jù),站在不同的立場(chǎng)上去解析,不同人發(fā)現(xiàn)的信息和觀點(diǎn)可能不一樣。不僅選用的圖表類型不一樣,即使采用同樣的圖表類型,通過不同的數(shù)據(jù)展示方式也可以強(qiáng)調(diào)不同觀點(diǎn)。最重要的是,這種方法具有很強(qiáng)的迷惑性。年份2016年2017年2018年職工工資(萬(wàn)元)200220250股東利潤(rùn)(萬(wàn)元)100120150一、數(shù)據(jù)可視化基礎(chǔ)例:某公司有5個(gè)股東,100個(gè)職工,公司的股東利潤(rùn)和員工工資總額如表所示:公司股東,工會(huì)和職工代表用同樣的數(shù)據(jù)繪制了三張不同的圖表。一、數(shù)據(jù)可視化基礎(chǔ)股東繪制的統(tǒng)計(jì)圖每年職工的總工資和股東的總利潤(rùn)的差來(lái)說明職工收入和股東利潤(rùn)的增長(zhǎng)情況。職工的總工資分別是200萬(wàn)元、220萬(wàn)元、250萬(wàn)元,股東的利潤(rùn)分別是100萬(wàn)元、120萬(wàn)元、150萬(wàn)元,每年職工的總工資和股東的總利潤(rùn)的差是一樣,它們是同步增長(zhǎng)的,所以股東說:“我們與職工是有福同享?!惫?huì)繪制的統(tǒng)計(jì)圖對(duì)比了這三年里股東和職工的收入增長(zhǎng)速度來(lái)說明職工收入和股東利潤(rùn)的增長(zhǎng)情況。工會(huì)把2016年職工的工資作為基數(shù),后面年份的收入除以2016年的收入得到增長(zhǎng)百分比。職工收入增長(zhǎng)為110%,125%,而股東利潤(rùn)增長(zhǎng)為120%和150%。因此工會(huì)認(rèn)為股東要適當(dāng)增加職工的工資。職工代表繪制的統(tǒng)計(jì)圖分析了三年里職工與股東人均利潤(rùn)的增長(zhǎng)變化來(lái)說明職工收入和股東利潤(rùn)的增長(zhǎng)情況。職工的人均工資分別為2萬(wàn)元,2.2萬(wàn)元和2.5萬(wàn)元,增加得非常少。股東的人均利潤(rùn)20萬(wàn)元,24萬(wàn)元和30萬(wàn)元,增加得很多。由此可見,這三年里股東與職工人均利潤(rùn)的增加懸殊太大。因此職工認(rèn)為股東應(yīng)大幅度地增加職工的工資。一、數(shù)據(jù)可視化基礎(chǔ)從上面例子可以看出,從同樣數(shù)據(jù)畫出的三份圖表,得出了三種不同的結(jié)論。股東、工會(huì)、職工三者是根據(jù)同一組數(shù)據(jù)從各自不同的觀點(diǎn)出發(fā),繪制出不同的統(tǒng)計(jì)圖,進(jìn)而根據(jù)它們得出了要表達(dá)的不同含義。應(yīng)該說,三者都是有理有據(jù)的。同一組數(shù)據(jù),不同的人站在不同的角度,可以畫出不同的統(tǒng)計(jì)圖,進(jìn)而可以得出不同的結(jié)論。一、數(shù)據(jù)可視化基礎(chǔ)圖表展示的觀點(diǎn)差異主要取決于幾個(gè)方面:1)要表達(dá)的觀點(diǎn)和突出的重點(diǎn);2)從數(shù)據(jù)中提取的信息;3)數(shù)據(jù)間的關(guān)系及提取信息的方法。數(shù)據(jù)本身對(duì)圖表的選擇和設(shè)計(jì)也有一定的影響。如采用直方圖表示數(shù)據(jù)對(duì)比,當(dāng)數(shù)據(jù)項(xiàng)差異懸殊時(shí)可能某些數(shù)據(jù)項(xiàng)數(shù)值過小無(wú)法得到量化的結(jié)果。如數(shù)據(jù)分類不當(dāng),餅圖也無(wú)法傳遞有效的信息。這些情況都要對(duì)圖表進(jìn)行進(jìn)一步的處理和美化。二、使用Matplotlib繪圖Python語(yǔ)言的matplotlib擴(kuò)展包是一個(gè)提供了跨平臺(tái)的2D圖形庫(kù),它可以將數(shù)據(jù)用多種形式展示出來(lái)。Matplotlib可畫出折線圖,柱狀圖,餅圖,雷達(dá)圖等。在matplotlib的官網(wǎng)上給出了500多個(gè)圖表展示的例子程序(/gallery/index.html)。Matplotlib提供了兩種編程風(fēng)格,一種是函數(shù)式繪圖,這種方式參考了matlab里面的繪圖函數(shù)語(yǔ)法。另一種是面向?qū)ο笫嚼L圖,這種方式更接近Matplotlib的底層架構(gòu),更能理解細(xì)節(jié)。matplotlib.pyplot是一個(gè)函數(shù)式繪圖的函數(shù)集合,其中每一個(gè)pyplot的函數(shù)都對(duì)圖進(jìn)行一些改動(dòng),例如創(chuàng)建圖,畫點(diǎn)或線,以及增加標(biāo)簽等。在面向?qū)ο蠓绞街?,matplotlib.axes.Axes和matplotlib.figure.Figure是最主要的兩個(gè)對(duì)象,分別表示坐標(biāo)軸和圖。這種模式下,通常使用pyplot.subplots創(chuàng)建一個(gè)圖和多個(gè)坐標(biāo)軸,并在此基礎(chǔ)上調(diào)用相關(guān)對(duì)象的方法繪制圖。Matplotlib提供了詳細(xì)的在線API文檔(/api/),并且在每個(gè)函數(shù)介紹后提供了使用該函數(shù)的例子。二、使用Matplotlib繪圖準(zhǔn)備環(huán)境安裝matplotlib后即可繪制不同的圖表,下面以一個(gè)簡(jiǎn)單的正弦函數(shù)為例說明圖表的繪制方法。(代碼參考hello.py)importmatplotlib.pyplotaspltimportmathx=range(721)y=[math.sin(i*3.14/180)foriinx]plt.axis([0,720,-1.1,1.1])plt.plot(x,y,'b')plt.xticks(range(0,721,90))plt.xlabel("degree")plt.ylabel("sin")plt.title("sinfunction")plt.show()

程序首先準(zhǔn)備了x,y兩個(gè)數(shù)組,x是0~720度,y是對(duì)應(yīng)的正弦函數(shù)值。使用axis函數(shù)設(shè)定x,y坐標(biāo)軸的起止范圍,plot函數(shù)畫出正弦曲線,xticks指定x軸的小刻度標(biāo)示。xlabel和ylabel分別是x,y軸的主題,title設(shè)置了圖表的主題。二、使用Matplotlib繪圖圖表相關(guān)的術(shù)語(yǔ)一個(gè)圖表中包含著很多圖表元素,這些圖表元素都有自己的名稱和專業(yè)術(shù)語(yǔ),只有知道了這些術(shù)語(yǔ),才可以更好地編輯加工圖表。圖表區(qū)表示整個(gè)圖表,包含所有數(shù)據(jù)系列、坐標(biāo)軸、標(biāo)題、圖例、數(shù)據(jù)表等。繪圖區(qū)是圖表的一部分,由垂直坐標(biāo)軸和水平坐標(biāo)軸及其負(fù)軸包圍的區(qū)域。下圖給出了圖表中的常用術(shù)語(yǔ):二、使用Matplotlib繪圖標(biāo)題(Title)和圖例(Legend)圖表標(biāo)題(title)用于對(duì)圖表的功能進(jìn)行說明,通常出現(xiàn)在圖表區(qū)的頂端中心處。圖例(legend)是一個(gè)方框,用于標(biāo)識(shí)為圖表中每個(gè)數(shù)據(jù)系列或分類指定的圖案或顏色。默認(rèn)情況下,圖例放在圖表的右側(cè)。數(shù)據(jù)標(biāo)簽是指派給單個(gè)數(shù)據(jù)點(diǎn)的數(shù)值或名稱。它在圖表上的顯示是可選的。數(shù)據(jù)標(biāo)簽可以包含很多項(xiàng)目。如“系列名稱”、“類別名稱”、“值”、“百分比”和“氣泡尺寸”。text函數(shù)可以在圖表區(qū)任意位置顯示文字。二、使用Matplotlib繪圖坐標(biāo)軸(Axes)一般情況下,圖表有兩個(gè)用于對(duì)數(shù)據(jù)進(jìn)行分類和度量的坐標(biāo)軸:分類軸(或/和次分類軸)和數(shù)值軸(或/和次數(shù)值軸)。三維圖表有第三個(gè)軸。餅圖或圓環(huán)圖沒有坐標(biāo)軸。某些組合圖表一般還會(huì)有次分類軸和次數(shù)值軸。次數(shù)值軸出現(xiàn)在主數(shù)值軸繪圖區(qū)的反面,它在繪制混合類型的數(shù)據(jù)(如數(shù)量和價(jià)格),需要各種不同刻度時(shí)使用。一般情況下,主數(shù)值軸在繪圖區(qū)的左側(cè),而次數(shù)值軸在繪圖區(qū)的右側(cè)(對(duì)于條形圖,主數(shù)值軸在繪圖區(qū)的下部,而次數(shù)值軸在繪圖區(qū)的上部)。坐標(biāo)軸包括坐標(biāo)刻度線(tick)、刻度線標(biāo)簽(ticklabel)和軸標(biāo)題(label)等??潭染€是類似于直尺分隔線的短度量線,與坐標(biāo)軸相交??潭染€標(biāo)簽用于標(biāo)識(shí)坐標(biāo)軸的分類或值。軸標(biāo)題是用于對(duì)坐標(biāo)軸進(jìn)行說明的文字。二、使用Matplotlib繪圖數(shù)據(jù)數(shù)據(jù)在繪圖區(qū)通過不同的函數(shù)可以表現(xiàn)為線(plot),柱狀圖(bar),散點(diǎn)(scatter)等。繪制折線圖時(shí),每條折線就是一個(gè)數(shù)據(jù)系列,對(duì)應(yīng)的y值是一個(gè)列表,和x的列表大小一致。圖表中的數(shù)據(jù)序列可以指定顏色或圖案,并展示在圖表的圖例中。折線圖,散點(diǎn)圖可以有一個(gè)或多個(gè)數(shù)據(jù)序列。但是餅圖只有一個(gè)數(shù)據(jù)序列。網(wǎng)格線和趨勢(shì)線網(wǎng)格線(Grid)是添加到圖表中易于查看和計(jì)算數(shù)據(jù)的線條,是坐標(biāo)軸上刻度線的延伸,并穿過繪圖區(qū)。有了網(wǎng)格線,就很容易回到坐標(biāo)軸進(jìn)行過程也稱為回歸分析。Matplotlib中沒有趨勢(shì)線的概念,可參照。趨勢(shì)線以圖形方式說明數(shù)據(jù)系列的變化趨勢(shì)。它們常用于繪制預(yù)報(bào)圖表,這個(gè)預(yù)報(bào)以通過numpy,scikit-learn等第三方庫(kù)計(jì)算出趨勢(shì),并用plot函數(shù)用不同顏色或標(biāo)記疊加在真實(shí)數(shù)據(jù)上。二、使用Matplotlib繪圖圖表類型及相關(guān)函數(shù)圖表類型函數(shù)備注折線圖plot(x,y,format_string,**kwargs)二維線畫圖函數(shù),可以繪制折線圖和散點(diǎn)圖柱狀圖bar(x,height,width,*,align='center',**kwargs)繪制柱狀圖

,該函數(shù)可以多次調(diào)用,有疊加效果。散點(diǎn)圖scatter(x,y)創(chuàng)建一個(gè)包含圓形的散點(diǎn)圖,x,y是長(zhǎng)度相同數(shù)組。二、使用Matplotlib繪圖圖表類型及相關(guān)函數(shù)圖表類型函數(shù)備注餅圖pie()繪制餅狀圖,可以自己計(jì)算每個(gè)類別所占的比例。直方圖hist()輸入一個(gè)序列,并指定分為幾個(gè)區(qū)間進(jìn)行統(tǒng)計(jì)。面積圖stackplot(x,*args,**kargs)繪制面積圖,圖像形如在不同折線間填充了顏色。二、使用Matplotlib繪圖坐標(biāo)軸格及相關(guān)函數(shù)坐標(biāo)軸格式函數(shù)備注X軸標(biāo)題xlabel()設(shè)置圖片中X軸的標(biāo)簽信息X軸刻度線xticks(x_tick,xtick_lable,fontproperties,fontsize)設(shè)置X軸的刻度信息(允許使用文本作為刻度值)X軸坐標(biāo)起止范圍xlim(xmin,xmax)設(shè)置X軸坐標(biāo)的起止范圍Y軸標(biāo)題ylabel()設(shè)置圖片中Y軸的標(biāo)簽信息Y軸刻度線yticks()設(shè)置Y軸的刻度信息(允許使用文本作為刻度值)X軸坐標(biāo)起止范圍ylim(ymin,ymax)設(shè)置Y軸坐標(biāo)的起止范圍坐標(biāo)起止范圍axis([xminxmaxyminymax])繪圖中用于設(shè)置坐標(biāo)值范圍二、使用Matplotlib繪圖標(biāo)注類型及相關(guān)函數(shù)標(biāo)注類型函數(shù)備注圖表標(biāo)題title()設(shè)置整個(gè)數(shù)據(jù)圖的標(biāo)題圖例legend(*args,**kwargs)添加圖例數(shù)據(jù)標(biāo)簽text(x,y,s)可以在繪制的圖片任何地方添加描述信息箭頭arrow()繪制一條帶箭頭的直線二、使用Matplotlib繪圖其他一些功能功能函數(shù)備注隱藏圖表hide()隱藏圖表顯示圖表show()將圖形呈現(xiàn)出來(lái)增加子圖add_subplot(*args,**kwargs)增加子圖創(chuàng)建多個(gè)子圖subplots(3,1,1)該函數(shù)的第一個(gè)參數(shù)是子圖的行數(shù),第二個(gè)參數(shù)是子圖的列數(shù),第三個(gè)參數(shù)是一個(gè)從1開始的序號(hào)三、使用Matplotlib繪制常見圖表散點(diǎn)圖散點(diǎn)圖由一些不連續(xù)的點(diǎn)組成,用來(lái)研究?jī)蓚€(gè)變量的相關(guān)性。包括正相關(guān)、負(fù)相關(guān)、不相關(guān)。主要通過scatter函數(shù)畫散點(diǎn)圖。主要參數(shù):x/y:數(shù)據(jù)

都是向量,而且必須長(zhǎng)度相等。s:標(biāo)記大小

以像素點(diǎn)的平方為單位的標(biāo)記面積,指定為下列形式之一:?數(shù)值標(biāo)量:以相同的大小繪制所有標(biāo)記。?行或列向量:使每個(gè)標(biāo)記具有不同的大小。x、y和sz向量中的

相應(yīng)元素確定每個(gè)標(biāo)記的位置和面積。sz向量的長(zhǎng)度必須等于x和y的長(zhǎng)度。?默認(rèn)大小為rcParams['lines.markersize']**2。defscatter(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):三、使用Matplotlib繪制常見圖表c:標(biāo)記顏色

標(biāo)記顏色,指定為下列形式之一:?RGB三元數(shù)或顏色名稱-使用相同的顏色繪制所有標(biāo)記。?由RGB三元數(shù)組成的三列矩陣-對(duì)每個(gè)標(biāo)記使用不同的顏色。

矩陣的每行為對(duì)應(yīng)標(biāo)記指定一種RGB三元數(shù)顏色。行數(shù)必須等于x和y的長(zhǎng)度。?向量-對(duì)每個(gè)標(biāo)記使用不同的顏色,并以線性方式將c中的

映射到當(dāng)前顏色圖中的顏色。c的長(zhǎng)度必須等于x和y的長(zhǎng)度。

要更改坐標(biāo)區(qū)的顏色圖,需使用colormap函數(shù)。在繪制散點(diǎn)圖時(shí),如果希望散點(diǎn)顏色成為顏色圖的索引,可以使用RGB顏色對(duì)照表中色值代碼的形式指定c。三、使用Matplotlib繪制常見圖表顏色對(duì)照表選項(xiàng)說明對(duì)應(yīng)的RGB色值代碼'red'

'r'紅色#FF0000'green'

'g'綠色#00FF00'blue'

'b'藍(lán)色#0000FF'yellow'

'y'黃色#FFFF00'magenta'

'm'品紅色#FF00FF'cyan'

'c'青藍(lán)色#00FFFF'white'

'w'白色#FFFFFF'black'

'k'黑色#000000注意:在繪制散點(diǎn)圖時(shí),如果要使用非預(yù)定義顏色繪制點(diǎn),也可以使用RGB顏色對(duì)照表中色值代碼的形式來(lái)指定顏色,形如c=[“#FFDAB9”,”#FF1493”,”#E066F”],該方法可以指定任意顏色。使用時(shí)要注意c中參數(shù)個(gè)數(shù)與x,y個(gè)數(shù)相等。三、使用Matplotlib繪制常見圖表marker:標(biāo)記樣式,其中值和說明如表所示。值說明'o'圓圈'+'加號(hào)'*'星號(hào)'.'點(diǎn)'x'叉號(hào)'square'

's'方形'diamond'

'd'菱形'^'上三角三、使用Matplotlib繪制常見圖表marker:標(biāo)記樣式,其中值和說明如表所示。值說明'v'下三角'>'右三角'<'左三角'pentagram'

'p'五角星(五角形)'hexagram'

'h'六角星(六角形)'none'無(wú)標(biāo)記'v'下三角'>'右三角三、使用Matplotlib繪制常見圖表edgecolors:輪廓顏色

和c類似,參數(shù)也相同alpha:透明度[0,1]:1不透明,0透明cmap:色彩盤

可以使用默認(rèn)的也可以使用自定義的,它實(shí)際上就是一個(gè)三列的矩陣(或者說,shape為[N,3]的array)?矩陣中的值取值范圍為[0.,1.]?每一行代表一個(gè)顏色(RGB)linewidths:線寬

標(biāo)記邊緣的寬度,默認(rèn)是沒有外圍輪廓線。注意事項(xiàng):color、marker等不能同時(shí)作為一個(gè)參數(shù),plt.scatter(x1,y1,‘bo’,s=5)不合法。三、使用Matplotlib繪制常見圖表比如現(xiàn)在有一組女大學(xué)生的身高和體重?cái)?shù)據(jù),可以畫散點(diǎn)圖來(lái)觀察兩組數(shù)據(jù)之間的關(guān)系編號(hào)123456789101112身高(cm)152158167172162166180177172172156164體重(kg)514655605556656668605655importmatplotlib.pyplotaspltimportnumpyasnpplt.rcParams['font.sans-serif']=['SimHei’]#用來(lái)正常顯示中文標(biāo)簽height=[152,158,167,172,162,166,180,177,172,172,156,164]weight=[51,46,55,60,55,56,65,66,68,60,56,55]plt.scatter(height,weight)plt.xlabel("身高(cm)")plt.ylabel("體重(kg)")plt.title("女生身高體重對(duì)應(yīng)關(guān)系")plt.show()三、使用Matplotlib繪制常見圖表接下來(lái)通過例子分別展示正相關(guān),負(fù)相關(guān),不相關(guān)。首先我們使用NumPy的隨機(jī)函數(shù)生成1000個(gè)隨機(jī)數(shù)x。y1,y2分別為2x+隨機(jī)數(shù),-2x-隨機(jī)數(shù),則y1與x為正相關(guān),y2與x為負(fù)相關(guān)。y3也采用NumPy的隨機(jī)函數(shù)生成1000個(gè)隨機(jī)數(shù),則y3與x不相關(guān)。importmatplotlib.pyplotaspltimportnumpyasnpplt.rcParams['font.sans-serif']=['SimHei']#用來(lái)正常顯示中文標(biāo)簽plt.rcParams['axes.unicode_minus']=False#解決保存圖像是負(fù)號(hào)'-'顯示為方塊的問題x=np.random.randn(1000)y1=2*x+np.random.randn(1000)y2=-2*x+np.random.randn(1000)y3=np.random.randn(1000)plt.figure(figsize=(15,5))三、使用Matplotlib繪制常見圖表plt.subplot(1,3,1)plt.scatter(x,y1)plt.title('散點(diǎn)圖示例-正相關(guān)')plt.subplot(1,3,2)plt.scatter(x,y2)plt.title('散點(diǎn)圖示例-負(fù)相關(guān)')plt.subplot(1,3,3)plt.scatter(x,y3)plt.title('散點(diǎn)圖示例-不相關(guān)')plt.show()三、使用Matplotlib繪制常見圖表散點(diǎn)圖有很多參數(shù),最常用的是顏色,點(diǎn)大小,透明度,點(diǎn)形狀。參數(shù)中s是指點(diǎn)的面積大小,c是點(diǎn)的顏色,marker是指點(diǎn)的形狀,alpha是指點(diǎn)的透明度。散點(diǎn)圖中透明度是一個(gè)很好的參數(shù),可以看出哪些數(shù)據(jù)比較集中,哪些不集中。在大數(shù)據(jù)處理的聚類分析中,常用不同顏色或形狀的點(diǎn)表示不同類別的數(shù)據(jù),可以得到非常直觀的印象。三、使用Matplotlib繪制常見圖表折線圖折線圖常用于顯示數(shù)據(jù)序列隨時(shí)間變化,數(shù)據(jù)變化的趨勢(shì)。非常適用于顯示在相等時(shí)間間隔下數(shù)據(jù)的走向變化。主要通過plot函數(shù)來(lái)畫折線圖。主要參數(shù)其中參數(shù)args是一個(gè)可變長(zhǎng)度參數(shù),允許多個(gè)x,y對(duì)和一個(gè)可選的格式字符串。例如,以下各項(xiàng)都是合法的:defplot(*args,**kwargs):plot(x,y)#plotx和y使用默認(rèn)線條樣式和顏色plot(x,y,'bo')#plotx和y使用藍(lán)色圓圈標(biāo)記plot(y)#ploty使用x作為索引數(shù)組0..N-1plot(y,'r+')#同上,但是用紅色加號(hào)三、使用Matplotlib繪制常見圖表如果x和/或y是2維的,則將繪制相應(yīng)的列。x,y:接收值為array,表示x軸與y軸對(duì)應(yīng)的數(shù)據(jù);無(wú)默認(rèn)值;其他的參數(shù)用來(lái)控制顏色,線型,標(biāo)注等。(1)針對(duì)線條的處理?線條類型參數(shù):linestyle或者ls,表示折線的類型,可以是實(shí)線、虛線、點(diǎn)虛線、點(diǎn)點(diǎn)線等,即'-','--','-.',':'等。?線條粗細(xì)參數(shù):linewidth或lw,可自行設(shè)置,默認(rèn)值為1;?線條顏色參數(shù):color或c,設(shè)置方法和散點(diǎn)圖中設(shè)置顏色方法一致。三、使用Matplotlib繪制常見圖表(2)針對(duì)數(shù)據(jù)標(biāo)記的處理?參數(shù)marker:數(shù)據(jù)標(biāo)記的類型?參數(shù)markeredgecolor或mec:數(shù)據(jù)標(biāo)記的邊界顏色?參數(shù)markeredgewidth或mew:數(shù)據(jù)標(biāo)記的寬度?參數(shù)markerfacecolor或mfc:數(shù)據(jù)標(biāo)記的填充色?alpha:接收值為0~1之間的小數(shù),表示點(diǎn)的透明度;(3)圖例label:表示數(shù)據(jù)圖例內(nèi)容。參數(shù)中l(wèi)abel=‘?dāng)?shù)據(jù)序列名稱’指定該數(shù)據(jù)序列的名稱,其后通過調(diào)用legend()函數(shù)可顯示不同數(shù)據(jù)序列的圖例。三、使用Matplotlib繪制常見圖表折線圖中可以畫多條折線表示不同的數(shù)據(jù)序列。下面以1萬(wàn)元分別存入活期,1年定期,3年定期后,在30年中的價(jià)值變化。2019年的活期,1年定期,3年定期的利率分別是0.35%,1.50%和2.75%。importmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']#用來(lái)正常顯示中文標(biāo)簽x=range(30)huoqi=[1.0035**(i+1)foriinx]#活期利率0.35%dingqi1=[1.015**(i+1)foriinx]#一年定期利率1.5%dingqi3=[1.0275**(i+1)foriinx]#活期利率2.75%plt.plot(huoqi,color='r',linewidth=5,linestyle=':',label='活期')#color指定線條顏色,labeL標(biāo)簽內(nèi)容plt.plot(dingqi1,color='g',linewidth=2,linestyle='--',label='一年定期')#linewidth指定線條粗細(xì)三、使用Matplotlib繪制常見圖表plt.plot(dingqi3,color='b',linewidth=0.5,linestyle='-.',label='三年定期')#linestyle指定線形為點(diǎn)plt.legend(loc=2)#標(biāo)簽展示位置,數(shù)字代表標(biāo)簽具位置plt.axis([0,30,1,2.5])plt.xlabel('時(shí)間')plt.ylabel('現(xiàn)金價(jià)值(萬(wàn)元)')plt.title('折線圖示例-利率的時(shí)間價(jià)值')plt.show()三、使用Matplotlib繪制常見圖表上面提到過,折線圖一般用來(lái)觀察數(shù)據(jù)隨時(shí)間的變化趨勢(shì),那么如果橫坐標(biāo)是年/月/日格式的話,matplotlit提供了另外的函數(shù)plot_date來(lái)將橫坐標(biāo)調(diào)整為日期格式,此函數(shù)可以設(shè)置顏色,線形,點(diǎn)狀等。當(dāng)然,我們也可以在一個(gè)圖上畫多個(gè)折線圖。上面討論了散點(diǎn)圖和折線圖,分別用到函數(shù)plt.scatter和plt.plot,但其實(shí)plt.plot也可以畫出散點(diǎn)圖,兩者在畫散點(diǎn)圖時(shí)區(qū)別不大,但是當(dāng)數(shù)據(jù)很大時(shí),plt.plot的效率將大大高于plt.scatter。因?yàn)閜lt.scatter會(huì)對(duì)每個(gè)單獨(dú)的散點(diǎn)進(jìn)行渲染,會(huì)耗費(fèi)很多的資源,而plt.plot中,散點(diǎn)之間彼此復(fù)制,所有點(diǎn)的配置只需進(jìn)行一次即可。因此處理大數(shù)據(jù)時(shí),plt.plot方法比plt.scatter方法好。三、使用Matplotlib繪制常見圖表?xiàng)l形圖條形圖用寬度相同的條形的高度來(lái)表示數(shù)據(jù)的多少,分為水平條形圖和垂直條形圖。條形圖顯示各個(gè)項(xiàng)目的比較情況。在水平條形圖中,垂直坐標(biāo)軸表示不同的類別,水平坐標(biāo)表示不同類別對(duì)應(yīng)的值。通過plt.bar將數(shù)據(jù)通過條形圖展現(xiàn)出來(lái)。主要參數(shù)left :x軸的位置序列,一般采用range函數(shù)產(chǎn)生一個(gè)序列,但是有時(shí)候可以是字符串;height:表示條形圖的高度,也就是y軸的數(shù)值;alpha:表示柱形圖的顏色透明度,默認(rèn)值為1;width:表示柱形圖的寬度,默認(rèn)值為0.8;color(facecolor):柱形圖填充的顏色,默認(rèn)為隨機(jī)色;defbar(left,height,width=0.8,bottom=None,hold=None,data=None,**kwargs)三、使用Matplotlib繪制常見圖表edgecolor:圖形邊緣顏色;label:解釋每個(gè)圖像代表的含義;linewidth(linewidths/lw):邊緣線的寬度,默認(rèn)值為1。注意:barh()函數(shù)與bar()函數(shù)的主要區(qū)別是:在bar()函數(shù)中,width這一參數(shù)代表的是柱子的寬度(胖瘦),而在barh()函數(shù)中width這一參數(shù)代表的是橫向柱子的長(zhǎng)度(長(zhǎng)短)。三、使用Matplotlib繪制常見圖表以2019年各省人口數(shù)據(jù)為例,數(shù)據(jù)來(lái)源為中國(guó)國(guó)家統(tǒng)計(jì)局(/news/shehui/726472.html)。代碼為barsample.py,數(shù)據(jù)文件為“2019分省人口及GDP.xlsx”。因篇幅關(guān)系,省份和人口的數(shù)據(jù)沒有全部列出來(lái),完整數(shù)據(jù)可以看代碼。importmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']#用來(lái)正常顯示中文標(biāo)簽province=['廣東','山東','河南','四川','江蘇','河北','湖南']population=[11346,10047.24,9605,8341,8029.3,7556.3,6860.2]plt.bar(range(len(province)),population)plt.xticks(range(len(province)),province,rotation=90)plt.ylabel("人口(萬(wàn)人)")plt.show()三、使用Matplotlib繪制常見圖表三、使用Matplotlib繪制常見圖表該例子中省份的名稱顯示雖然旋轉(zhuǎn)了90度,看起來(lái)仍然不方便。這種情況下可以采用水平條形圖。第一種方法是在plt.bar函數(shù)中指定orientation='horizontal'參數(shù),第二種方法是是直接使用plt.barh函數(shù)。使用barh時(shí)x軸表示人口數(shù)量,y軸表示不同的省份。將barh函數(shù)調(diào)用替換為下面的語(yǔ)句也可以得到同樣的圖表plt.barh(range(len(province)),population,height=0.7)plt.yticks(range(len(province)),province)plt.tick_params(labelsize=8)plt.xlabel("人口(萬(wàn)人)")plt.bar(0,bottom=range(len(province)),width=population,height=0.7,orientation='horizontal')三、使用Matplotlib繪制常見圖表三、使用Matplotlib繪制常見圖表當(dāng)然,條形圖不僅限于對(duì)比一組數(shù)據(jù)。常見的條形圖還可以對(duì)比多組數(shù)據(jù)。使用并列條形圖設(shè)置好不同系列的位置即可。下面是matplotlib官方的例子,展示了如何畫出并列條形圖。importmatplotlibimportmatplotlib.pyplotaspltimportnumpyasnplabels=['G1','G2','G3','G4','G5']men_means=[20,34,30,35,27]women_means=[25,32,34,20,25]x=np.arange(len(labels))#thelabellocationswidth=0.35#thewidthofthebarsfig,ax=plt.subplots()rects1=ax.bar(x-width/2,men_means,width,label='Men')rects2=ax.bar(x+width/2,women_means,width,label='Women’)#Addsometextforlabels,titleandcustomx-axisticklabels,etc.ax.set_ylabel('Scores')ax.set_title('Scoresbygroupandgender')三、使用Matplotlib繪制常見圖表ax.set_xticks(x)ax.set_xticklabels(labels)ax.legend()其中在調(diào)用bar時(shí)men_means對(duì)應(yīng)的x為x+width/2,而women_means對(duì)應(yīng)的x為x-width/2。由于指定了不同的x位置,兩組數(shù)據(jù)可以并排放置。三、使用Matplotlib繪制常見圖表垂直堆疊條形圖可以用來(lái)顯示不同類別中各個(gè)子類的比例關(guān)系。如大學(xué)不同專業(yè)中男女生比例。垂直并列條形圖需要通過bottom設(shè)置,bottom的坐標(biāo)是建立在另一個(gè)條形圖基礎(chǔ)上。importnumpyasnpimportmatplotlib.pyplotaspltN=5menMeans=(20,35,30,35,27)womenMeans=(25,32,34,20,25)menStd=(2,3,4,1,2)womenStd=(3,5,2,3,3)ind=np.arange(N)#thexlocationsforthegroupswidth=0.35#thewidthofthebars:canalsobelen(x)sequencep1=plt.bar(ind,menMeans,width,yerr=menStd)p2=plt.bar(ind,womenMeans,width,bottom=menMeans,yerr=womenStd)plt.ylabel('Scores')plt.title('Scoresbygroupandgender')plt.xticks(ind,('G1','G2','G3','G4','G5'))三、使用Matplotlib繪制常見圖表垂直并列條形圖需要通過bottom設(shè)置,bottom的坐標(biāo)是建立在另一個(gè)條形圖基礎(chǔ)上。例子中畫womenMeans時(shí),指定的bottom為menMeans,即女生的數(shù)據(jù)在男生的上方。plt.yticks(np.arange(0,81,10))plt.legend((p1[0],p2[0]),('Men','Women'))plt.show()三、使用Matplotlib繪制常見圖表直方圖直方圖(Histogram)由一系列高度不等的縱向條紋或線段表示數(shù)據(jù)分布的情況。一般用橫軸表示數(shù)據(jù)類型,縱軸表示分布情況。直方圖是數(shù)值數(shù)據(jù)分布的精確圖形表示。這是一個(gè)連續(xù)變量(定量變量)的概率分布的估計(jì),并且被卡爾·皮爾遜(KarlPearson)首先引入。它是一種特殊的條形圖。條形圖中的數(shù)據(jù)一般是獨(dú)立的,表示數(shù)據(jù)的矩形條之間一般有空白。而直方圖一般用于統(tǒng)計(jì)不同區(qū)間的數(shù)據(jù)分布,表示數(shù)據(jù)的矩形條之間一般是連續(xù)的。三、使用Matplotlib繪制常見圖表主要參數(shù):x:數(shù)據(jù)集,最終的直方圖將對(duì)數(shù)據(jù)集進(jìn)行統(tǒng)計(jì);bins:指定直方圖條形的個(gè)數(shù);range:顯示的區(qū)間;normed:標(biāo)準(zhǔn)化,是否將直方圖的頻數(shù)轉(zhuǎn)換成頻率;density:顯示的是頻數(shù)統(tǒng)計(jì)結(jié)果,默認(rèn)為false,為True則顯示頻率統(tǒng)計(jì)結(jié)果,這里需要注意,頻率統(tǒng)計(jì)結(jié)果=區(qū)間數(shù)目/(總數(shù)*區(qū)間寬度),和normed效果一致,官方推薦使用density;histtype:指定直方圖的類型,可選{'bar','barstacked','step','stepfilled'}之一,默認(rèn)為bar,推薦使用默認(rèn)配置,step使用的是梯狀,stepfilled則會(huì)對(duì)梯狀內(nèi)部進(jìn)行填充,效果與bar類似;defhist(x,bins=None,range=None,normed=False,weights=None,cumulative=False,bottom=None,histtype='bar',align='mid',orientation='vertical',rwidth=None,log=False,color=None,label=None,stacked=False,hold=None,data=None,**kwargs):三、使用Matplotlib繪制常見圖表align:設(shè)置條形邊界值的對(duì)其方式,可選{'left','mid','right'}之一,默認(rèn)為'mid',還有l(wèi)eft或者right,會(huì)有部分空白區(qū)域,推薦使用默認(rèn);orientation:水平或垂直方向['horizontal','vertical'],默認(rèn)為垂直方向;rwidth:柱子與柱子之間的距離,默認(rèn)是0;log:是否需要對(duì)繪圖數(shù)據(jù)進(jìn)行l(wèi)og變換,默認(rèn)False;stacked:當(dāng)有多個(gè)數(shù)據(jù)時(shí),是否需要將直方圖呈堆疊擺放,默認(rèn)水平擺放。color:設(shè)置直方圖顏色;label:設(shè)置直方圖的標(biāo)簽,可通過legend展示其圖例;bottom:可以為直方圖的每個(gè)條形添加基準(zhǔn)線,默認(rèn)為0。hist函數(shù)主要輸入一個(gè)序列,并指定分為幾個(gè)區(qū)間進(jìn)行統(tǒng)計(jì)。按照在每個(gè)區(qū)間內(nèi)的數(shù)據(jù)數(shù)量繪制圖形,展示不同區(qū)間的數(shù)據(jù)數(shù)量。三、使用Matplotlib繪制常見圖表下面的例子展示了如何繪制直方圖。importmatplotlib.pyplotaspltimportnumpyasnpN_points=100000n_bins=20#Generateanormaldistribution,centeratx=0andy=5x=np.random.randn(N_points)y=.4*x+np.random.randn(100000)+5fig,axs=plt.subplots(1,2,sharey=True,tight_layout=True)#Wecansetthenumberofbinswiththe`bins`kwargaxs[0].hist(x,bins=n_bins)axs[1].hist(y,bins=n_bins)plt.show()三、使用Matplotlib繪制常見圖表三、使用Matplotlib繪制常見圖表面積圖面積圖可用于繪制隨時(shí)間發(fā)生的變化量,用于引起人們對(duì)總值趨勢(shì)的關(guān)注。通過顯示所繪制的值的總和,面積圖還可以顯示部分與整體的關(guān)系。使用plt.stackplot函數(shù)可繪制面積圖。從函數(shù)名稱也可以看出,面積圖和折線圖有些類似。從圖的表現(xiàn)形式來(lái)看,面積圖就像是在不同折線間填充了顏色。主要參數(shù):x:指定面積圖的x軸數(shù)據(jù);*args:可變參數(shù),可以接受任意多的y軸數(shù)據(jù),即各個(gè)拆分的數(shù)據(jù)對(duì)象;**kargs:關(guān)鍵字參數(shù),可以通過傳遞其他參數(shù)來(lái)修飾面積圖,如標(biāo)簽、顏色,用法與之前的labels、colors用法一致。defstackplot(x,*args,**kwargs):三、使用Matplotlib繪制常見圖表下面來(lái)自官網(wǎng)的例子展示了如何繪制面積圖。importnumpyasnpimportmatplotlib.pyplotaspltx=[1,2,3,4,5]y1=[1,1,2,3,5]y2=[0,4,2,6,8]y3=[1,3,5,7,9]y=np.vstack([y1,y2,y3])labels=["Fibonacci","Evens","Odds"]fig,ax=plt.subplots()ax.stackplot(x,y1,y2,y3,labels=labels)ax.legend(loc='upperleft')plt.show()fig,ax=plt.subplots()ax.stackplot(x,y)plt.show()三、使用Matplotlib繪制常見圖表餅圖餅圖常用來(lái)對(duì)數(shù)據(jù)的比例進(jìn)行展示,比如大學(xué)中來(lái)自不同省份學(xué)生的比例,每月家庭開支中各項(xiàng)內(nèi)容所占比例。主要通過pie函數(shù)來(lái)畫餅圖。主要參數(shù):x:(每一塊)的比例,如果sum(x)>1會(huì)使用sum(x)歸一化;labels:(每一塊)餅圖外側(cè)顯示的說明文字;explode:(每一塊)離開中心距離;startangle:起始繪制角度,默認(rèn)圖是從x軸正方向逆時(shí)針畫起,如設(shè)定=90則從y軸正方向畫起;defpie(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,hold=None,data=None):三、使用Matplotlib繪制常見圖表shadow:在餅圖下面畫一個(gè)陰影。默認(rèn)值:False,即不畫陰影;labeldistance:label標(biāo)記的繪制位置,相對(duì)于半徑的比例,默認(rèn)值為1.1,如<1則繪制在餅圖內(nèi)側(cè);autopct:控制餅圖內(nèi)百分比設(shè)置,可以使用format字符串或者formatfunction'%1.1f'指小數(shù)點(diǎn)前后位數(shù)(沒有用空格補(bǔ)齊);pctdistance:類似于labeldistance,指定autopct的位置刻度,默認(rèn)值為0.6;radius:控制餅圖半徑,默認(rèn)值為1;counterclock:指定指針方向;布爾值,可選參數(shù),默認(rèn)為:True,即逆時(shí)針。將值改為False即可改為順時(shí)針。wedgeprops:字典類型,可選參數(shù),默認(rèn)值:None。參數(shù)字典傳遞給wedge對(duì)象用來(lái)畫一個(gè)餅圖。例如:wedgeprops={'linewidth':3}設(shè)置wedge線寬為3。textprops:設(shè)置標(biāo)簽(labels)和比例文字的格式;字典類型,可選參數(shù),默認(rèn)值為:None。傳遞給text對(duì)象的字典參數(shù)。三、使用Matplotlib繪制常見圖表center:浮點(diǎn)類型的列表,可選參數(shù),默認(rèn)值:(0,0),圖標(biāo)中心位置。frame:布爾類型,可選參數(shù),默認(rèn)值:False。如果是true,繪制帶有表的軸框架。rotatelabels:布爾類型,可選參數(shù),默認(rèn)為:False。如果為True,旋轉(zhuǎn)每個(gè)label到指定的角度。以下舉例說明如何使用pie函數(shù)畫出餅圖。importmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']#用來(lái)正常顯示中文標(biāo)簽labels=['衣服','飲食','房貸','交通','育兒','娛樂','其他']sizes=[5,15,50,5,10,5,10]explode=(0,0,0.1,0,0,0,0)plt.pie(sizes,explode=explode,labels=labels,autopct='%1.1f%%',shadow=False,startangle=150)plt.title("餅圖示例-2019年上半年家庭支出")plt.axis('equal')#將餅圖顯示為正圓形plt.show()三、使用Matplotlib繪制常見圖表注意事項(xiàng):1)pie函數(shù)默認(rèn)繪制形狀為橢圓形,需自行設(shè)置坐標(biāo)軸模式(plt.axis('equal'))來(lái)顯示為圓形;2)pie()繪制順序默認(rèn)從x正半軸開始逆時(shí)針方向,當(dāng)x向量所有元素之和小于1時(shí),畫圖會(huì)正常進(jìn)行,但餅圖會(huì)有缺口。當(dāng)x向量所有元素之和大于1時(shí),將按各元素百分比進(jìn)行繪制。四、進(jìn)階功能子圖很多時(shí)候,需要從不同的角度對(duì)比和分析數(shù)據(jù)。這可以通過將多個(gè)圖放置在一起進(jìn)行對(duì)比。Matplotlib中通過子圖subplot的概念實(shí)現(xiàn)這一功能。通過plt.axes函數(shù)可以創(chuàng)建基本子圖,默認(rèn)情況下它會(huì)創(chuàng)建一個(gè)標(biāo)準(zhǔn)的坐標(biāo)軸,并填滿整張圖。但是可以通過參數(shù)指定子圖的位置和大小。這個(gè)函數(shù)的參數(shù)是個(gè)列表形式,有四個(gè)值,從前往后,分別是子圖左下角基點(diǎn)的x和y坐標(biāo)以及子圖的寬度和高度,數(shù)值的取值范圍是0-1之間,畫布左下角是(0,0),畫布右上角是(1,1)。四、進(jìn)階功能importmatplotlib.pyplotasplt#ax1=plt.axes([0,0,1,1])#布滿整個(gè)畫布,沒有坐標(biāo)軸ax1=plt.axes()#使用默認(rèn)配置,布滿整個(gè)畫布并畫上坐標(biāo)軸plt.grid()ax2=plt.axes([0.4,0.4,0.2,0.2])#在畫布中間繪制一個(gè)子圖plt.show()四、進(jìn)階功能上面是Matlab接口的風(fēng)格,面向?qū)ο螽媹D接口中有類似的fig.add_axes()方法可以增加新的子圖。下面的例子在兩個(gè)子圖里顯示了sin和cos的變化趨勢(shì)。importmatplotlib.pyplotaspltimportnumpyasnpfig=plt.figure()ax1=fig.add_axes([0.1,0.5,0.8,0.4],xticklabels=[],ylim=(-1.2,1.2))ax2=fig.add_axes([0.1,0.1,0.8,0.4],ylim=(-1.2,1.2))x=np.linspace(0,10)ax1.plot(np.sin(x))ax2.plot(np.cos(x))plt.show()四、進(jìn)階功能第二種方式為使用plt.subplot方法,該方法有三個(gè)整數(shù)參數(shù),分別表示行數(shù)、列數(shù)和子圖索引值。索引值從1開始,從左上角到右下角依次自增。plt.subplots_adjust方法可以指定子圖的坐標(biāo)和間距,參數(shù)分別為子圖上下左右的坐標(biāo),以及間距(wspace)和上下的間距(hspace)。四、進(jìn)階功能importmatplotlib.pyplotaspltforiinrange(1,7):plt.subplot(2,3,i)plt.subplots_adjust(wspace=0.3,hspace=0.2)#調(diào)整子圖間距

plt.text(0.5,0.5,str((2,3,i)),fontsize=16,ha='center')plt.show()四、進(jìn)階功能使用面向?qū)ο蟮姆椒╢ig.add_subplot()也可以實(shí)現(xiàn)同樣的效果。使用plt.subplots()方法可以快速地創(chuàng)建多子圖環(huán)境,并返回一個(gè)包含子圖的Numpy數(shù)組。通過對(duì)返回的ax數(shù)組進(jìn)行調(diào)用,可以操作每個(gè)子圖,繪制圖形。但是需要注意的是,subplot()和subplots()兩個(gè)方法在方法名上差個(gè)字母s外,subplots的索引是從0開始的。另外subplots()方法還可以通過兩個(gè)布爾型參數(shù)sharex和sharey,指定是否只顯示最外側(cè)的x或y軸的標(biāo)簽。importmatplotlib.pyplotaspltfig=plt.figure()fig.subplots_adjust(hspace=0.2,wspace=0.3)foriinrange(1,7):ax=fig.add_subplot(2,3,i)ax.text(0.5,0.5,str((2,3,i)),fontsize=16,ha='center')plt.show()四、進(jìn)階功能下面的例子同樣實(shí)現(xiàn)使用plt.subplot方法運(yùn)行出結(jié)果的效果。對(duì)于不規(guī)則的子圖,可以使用復(fù)雜網(wǎng)格的方式進(jìn)行組織。復(fù)雜網(wǎng)格首先指定一個(gè)多行多列的網(wǎng)格,然后每個(gè)子圖占用相鄰的一個(gè)或多個(gè)網(wǎng)格繪制。importmatplotlib.pyplotaspltfig,axs=plt.subplots(2,3)fig.subplots_adjust(hspace=0.2,wspace=0.3)foriinrange(2):forjinrange(3):axs[i,j].text(0.5,0.5,str((2,3,i)),fontsize=16,ha='center')plt.show()importmatplotlib.pyplotaspltgrid=plt.GridSpec(2,3,wspace=0.3,hspace=0.2)#生成兩行三列的網(wǎng)格plt.subplot(grid[0,0])#將0,0的位置使用plt.text(0.5,0.5,"[0,0]",fontsize=16,ha='center')四、進(jìn)階功能plt.subplot(grid[0,1])#將0,1的位置使用plt.text(0.5,0.5,"[0,1]",fontsize=16,ha='center')plt.subplot(grid[1,:2])#使用1,1-2的位置plt.text(0.5,0.5,"[1,0-1]",fontsize=16,ha='center')plt.subplot(grid[:2,2])#使用1-2,2的位置plt.text(0.5,0.5,"[0-1,2]",fontsize=16,ha='center')plt.show()四、進(jìn)階功能中文顯示matplotlib繪制圖像的時(shí)候如指定了中文的坐標(biāo)軸標(biāo)簽或標(biāo)題,顯示的時(shí)候中文字符會(huì)顯示為小方格子。造成這個(gè)現(xiàn)象的原因是matplotlib庫(kù)的配置信息里面沒有中文字體的相關(guān)信息。通過修改matplotlibrc配置文件可設(shè)置字體相關(guān)參數(shù)。但是更常用的方法是在程序中動(dòng)態(tài)設(shè)置字體參數(shù)。下面的兩種方式都可以達(dá)到同樣的目的。通過pyplot進(jìn)行設(shè)置:通過pylab進(jìn)行設(shè)置:importmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']#指定默認(rèn)字體正確顯示中文plt.rcParams['axes.unicode_minus']=False#用來(lái)正常顯示負(fù)號(hào)frompylabimportmplmpl.rcParams['font.sans-serif']=['SimHei']#指定默認(rèn)字體正確顯示中文mpl.rcParams['axes.unicode_minus']=False#用來(lái)正常顯示負(fù)號(hào)四、進(jìn)階功能具體支持哪些文字,可以通過font_manager.py文件進(jìn)行查看。FontManager類在初始化時(shí),會(huì)遍歷plt.rcParams['datapath']目錄下的fonts子目錄,并將其中的字體加入可用字體列表。下面列出了一些常用的指定字體:黑體SimHei 仿宋FangSong 楷體KaiTi微軟雅黑MicrosoftYaHei 微軟正黑體MicrosoftJhengHei四、進(jìn)階功能下面的程序在hello.py的基礎(chǔ)上修改了中文的坐標(biāo)軸標(biāo)簽和標(biāo)題。importmatplotlib.pyplotaspltimportmathplt.rcParams['font.sans-serif']=['SimHei']#用來(lái)正常顯示中文標(biāo)簽plt.rcParams['axes.unicode_minus']=False#用來(lái)正常顯示負(fù)號(hào)x=range(721)y=[math.sin(i*3.14/180)foriinx]plt.axis([0,720,-1.1,1.1])plt.plot(x,y,'b')plt.xticks(range(0,721,90))plt.xlabel("度數(shù)")plt.ylabel("正弦值(sin)")plt.title("正弦函數(shù)")plt.show()四、進(jìn)階功能運(yùn)行結(jié)果如圖所示,其中未指定中文字體和坐標(biāo)軸使用unicode時(shí)的結(jié)果為(a),指定中文字體,但是未指定坐標(biāo)軸使用unicode時(shí)的結(jié)果為(b),同時(shí)指定兩個(gè)參數(shù)顯示的結(jié)果為(c)。四、進(jìn)階功能除了使用matplotlib已支持的字體外,也可以使用字體管理器font_manager從文件中讀取系統(tǒng)的字體文件。運(yùn)行結(jié)果如圖所示,標(biāo)題使用了從字體文件讀取的字體-華文行楷。兩個(gè)坐標(biāo)軸的標(biāo)簽仍使用了黑體。利用這種方法,可以在一幅圖中同時(shí)使用多種字體。frommatplotlib.font_managerimportFontPropertiesfont=FontProperties(fname=r"C:\\WINDOWS\\Fonts\\STXINGKA.TTF",size=14)plt.title("正弦函數(shù)",fontproperties=font)四、進(jìn)階功能組合圖形與標(biāo)注折線圖,條形圖都可以同時(shí)展示多個(gè)數(shù)據(jù)序列。但是當(dāng)圖表中不同數(shù)據(jù)序列的數(shù)字變化很大,或表示不同含義時(shí)(如成交量和變化率),可以選擇增加一個(gè)次要坐標(biāo)軸。如使用條形圖結(jié)合主要坐標(biāo)軸展示幾種商品在不同月份的成交量。用折線圖結(jié)合次坐標(biāo)軸展示變化率。次坐標(biāo)軸在顯示柱形圖和折線圖組合的圖表中表現(xiàn)非常好。Matplotlib中可以在圖的右側(cè)創(chuàng)建第二個(gè)y軸作為次坐標(biāo)軸,也可以在圖的上邊創(chuàng)建第二個(gè)x軸作為次坐標(biāo)軸。一般的用法是建立第二個(gè)y軸。首先調(diào)用subplots()函數(shù)創(chuàng)建子圖,在獲取的第一個(gè)坐標(biāo)軸Axes上畫主坐標(biāo)軸相關(guān)的數(shù)據(jù),然后調(diào)用twinx()函數(shù)生成鏡像的y軸次坐標(biāo)軸,在獲取的第二個(gè)坐標(biāo)軸上繪制次坐標(biāo)軸相關(guān)的數(shù)據(jù)。四、進(jìn)階功能下面的例子使用主坐標(biāo)軸繪制了陜西省2010年至2018年出生率和出生人口,數(shù)據(jù)來(lái)源為陜西省統(tǒng)計(jì)局(/126/111/19566.html)。importmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']#用來(lái)正常顯示中文標(biāo)簽#數(shù)據(jù)來(lái)自陜西省統(tǒng)計(jì)局#/126/111/19566.htmlpopulation=[36.34,36.45,37.93,37.62,38.18,38.22,40.46,42.48,41.08]year=range(2010,2019)growth=[9.73,9.75,10.12,10.01,10.13,10.1,10.64,11.11,10.67]fig,ax1=plt.subplots()ax1.bar(year,population,width=0.5,label="出生人口(萬(wàn)人)")ax1.set_ylim([33.00,44.00])ax1.set_yticks(range(33,44))ax2=ax1.twinx()#繪制y軸的次坐標(biāo)軸ax2.plot(year,growth,"r",label="出生率(%)")ax2.set_ylim([9.00,11.5])plt.s

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論