Matplotlib可视化数据分析图表下(常用图表的绘制、折线图、柱形图、直方图、饼形图、散点图、面积图、热力图、箱形图、3D图表、绘制多个图表、双y轴可视化图表、颜色渐变图)
生活随笔
收集整理的這篇文章主要介紹了
Matplotlib可视化数据分析图表下(常用图表的绘制、折线图、柱形图、直方图、饼形图、散点图、面积图、热力图、箱形图、3D图表、绘制多个图表、双y轴可视化图表、颜色渐变图)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
- 本文來(lái)自《Python數(shù)據(jù)分析從入門到精通》_明日科技編著
5.6 常用圖表的繪制
- 本節(jié)介紹常用圖表的繪制,主要包括繪制折線圖、繪制柱形圖、繪制直方圖、繪制餅形圖、繪制散點(diǎn)圖、繪制面積圖、繪制熱力圖、繪制箱型圖、繪制3D圖表、繪制多個(gè)子圖表以及圖表的保存。對(duì)于常用的圖表類型以繪制多種類型圖表進(jìn)行舉例,以適應(yīng)不同應(yīng)用場(chǎng)景的需求。
5.6.1 繪制折線圖
- 折線圖可以顯示隨時(shí)間而變化的連續(xù)數(shù)據(jù),因此非常適用于顯示在相等時(shí)間間隔下數(shù)據(jù)的趨勢(shì)。如基礎(chǔ)體溫曲線圖、學(xué)生成績(jī)走勢(shì)圖、股票月成交量走勢(shì)圖,月銷售量統(tǒng)計(jì)分析圖、微博、公眾號(hào)、網(wǎng)站訪問(wèn)量統(tǒng)計(jì)圖等都可以用折線圖體現(xiàn)。在折線圖中,類別數(shù)據(jù)沿水平軸均勻分布,所有值數(shù)據(jù)沿垂直軸均勻分布。
- Matplotlib繪制折線圖主要使用plot()函數(shù),相信通過(guò)前面的學(xué)習(xí),您已經(jīng)了解了plot()函數(shù)的基本用法,并能夠繪制一些簡(jiǎn)單的折線圖,下面嘗試?yán)L制多折線圖。
繪制學(xué)生語(yǔ)數(shù)外各科成績(jī)分析圖(12)
- 使用plot()函數(shù)繪制多折線圖。例如,繪制學(xué)生語(yǔ)數(shù)外各科成績(jī)分析圖,程序代碼如下:
- 上述舉例,用到了幾個(gè)參數(shù),下面進(jìn)行說(shuō)明。
- mfc:標(biāo)記的顏色
- ms:標(biāo)記的大小
- mec:標(biāo)記邊框的顏色
- alpha:透明度,設(shè)置該參數(shù)可以改變顏色的深淺
5.6.2 繪制柱形圖
- 柱形圖,又稱長(zhǎng)條圖、柱狀圖、條狀圖等,是一種以長(zhǎng)方形的長(zhǎng)度為變量的統(tǒng)計(jì)圖表。柱形圖用來(lái)比較兩個(gè)或兩個(gè)以上的數(shù)據(jù)(不同時(shí)間或者不同條件),只有一個(gè)變量,通常用于較小的數(shù)據(jù)集分析。
- Matplotlib繪制柱形圖主要使用bar()函數(shù),語(yǔ)法如下:
- x:x軸數(shù)據(jù)
- height:柱子的高度,也就是y軸數(shù)據(jù)
- width:浮點(diǎn)型,柱子的寬度,默認(rèn)值為0.8,可以指定固定值
- bottom:標(biāo)量或數(shù)組,可選參數(shù),柱形圖的y坐標(biāo),默認(rèn)值為None
- *:星號(hào)本身不是參數(shù)。星號(hào)表示其后面的參數(shù)為命名關(guān)鍵字參數(shù),命名關(guān)鍵字參數(shù)必須傳入?yún)?shù)名;否則程序會(huì)出現(xiàn)錯(cuò)誤。
- align:對(duì)齊方式,如center(居中)和edge(邊緣),默認(rèn)值為center
- data:data關(guān)鍵字參數(shù)。如果給定一個(gè)數(shù)據(jù)參數(shù),所有位置和關(guān)鍵字參數(shù)都將被替換
- **kwargs:關(guān)鍵字參數(shù),其他可選參數(shù),如color(顏色)、alpha(透明度)、label(每個(gè)柱子顯示的標(biāo)簽)等。
4行代碼繪制簡(jiǎn)單的柱形圖(13)
import matplotlib.pyplot as plt x=[1,2,3,4,5,6] height=[10,20,30,40,50,60] plt.bar(x,height)- bar()函數(shù)可以繪制出各種類型的柱形圖,如基本柱形圖、多柱形圖、堆疊柱形圖,只要將bar()函數(shù)的主要參數(shù)理解透徹,就會(huì)達(dá)到意想不到的效果。下面介紹幾種常見的柱形圖。
1.基本柱形圖(14)
- 使用bar()函數(shù)繪制“2013-2019年線上圖書銷售額分析圖”,程序代碼如下:
2.多柱形圖 (15)
- 對(duì)于線上圖書銷售額的統(tǒng)計(jì),如果要統(tǒng)計(jì)各個(gè)平臺(tái)的銷售額,可以使用多柱形圖,不同顏色的柱子代表不同的平臺(tái),如京東、天貓、自營(yíng)等,程序代碼如下:
5.6.3 繪制直方圖
- 直方圖,又稱質(zhì)量分布圖,由一系列高度不等的縱向條紋或線段表示數(shù)據(jù)分布的情況。一般用橫軸表示數(shù)據(jù)類型,縱軸表示分布情況。直方圖是數(shù)值數(shù)據(jù)分布的精確圖形表示,是一個(gè)連續(xù)變量(定量變量)的概率分布的估計(jì)。
- 繪制直方圖主要使用hist()函數(shù),語(yǔ)法如下:
- x:數(shù)據(jù)集,最終的直方圖將對(duì)數(shù)據(jù)集進(jìn)行統(tǒng)計(jì)
- bins:統(tǒng)計(jì)數(shù)組的區(qū)間分布
- range:元組類型,顯示的區(qū)間
- density:布爾型,顯示的頻率統(tǒng)計(jì)結(jié)果,默認(rèn)值為None。設(shè)置值為False,不顯示頻率統(tǒng)計(jì)結(jié)果;設(shè)置值為True,則顯示頻率統(tǒng)計(jì)結(jié)果。需要統(tǒng)計(jì)結(jié)果=區(qū)間數(shù)目/(總數(shù)x區(qū)間寬度)。
- histtype:可選參數(shù),設(shè)置值為bar、barstacked、step或stepfilled,默認(rèn)值bar,推薦使用默認(rèn)配置,其中step使用的是梯狀,stepfilled則會(huì)對(duì)梯狀內(nèi)部進(jìn)行填充,效果與bar類似。
- align:可選參數(shù),控制柱狀圖的水平分布,設(shè)置值為left、mid或right,默認(rèn)值為mid,其中,left或者right會(huì)有部分空白區(qū)域,推薦使用默認(rèn)值。
- log:布爾型,默認(rèn)值為False,即y坐標(biāo)軸是否選擇指數(shù)刻度。
- stacked:布爾型,默認(rèn)值為False,是否為堆積柱狀圖。
繪制簡(jiǎn)單直方圖(16)
import matplotlib.pyplot as plt x=[22,87,5,43,56,73,55,54,11,20,51,5,79,31,27] plt.hist(x, bins = [0,25,50,75,100])直方圖分析學(xué)生數(shù)學(xué)成績(jī)分布情況(17)
import pandas as pd import matplotlib.pyplot as plt df = pd.read_excel('grade1.xls') plt.rcParams['font.sans-serif']=['SimHei'] #解決中文亂碼 x=df['得分'] plt.xlabel('分?jǐn)?shù)') plt.ylabel('學(xué)生數(shù)量') # 顯示圖標(biāo)題 plt.title("高一數(shù)學(xué)成績(jī)分布直方圖") plt.hist(x, bins = [0,25,50,75,100,125,150],facecolor="blue", edgecolor="black", alpha=0.7)5.6.4 繪制餅形圖
- 餅形圖常用來(lái)顯示各個(gè)部分在整體中所占的比例。例如,在工作中如果遇到需要計(jì)算總費(fèi)用或金額的各個(gè)部分構(gòu)成的情況,一般通過(guò)各個(gè)部分與總額相除來(lái)計(jì)算,而且這種比例表示方法很抽象,而通過(guò)餅形圖將直接顯示各個(gè)組成部分所占比例,一目了然。
- Matplotlib繪制餅形圖主要使用pie()函數(shù),語(yǔ)法如下:
- x:每一塊餅圖的比例,如果sum(x) > 1會(huì)使用sum(x)歸一化。
- explode:每一塊餅圖離中心的距離。
- labels:每一塊餅圖外側(cè)顯示的說(shuō)明文字
- autopct:設(shè)置餅圖百分比,可以使用格式化字符串format()函數(shù)。如’%1.1f’保留小數(shù)點(diǎn)前后1位。
- pctdistance:類似于labeldistance參數(shù),指定百分比的位置刻度,默認(rèn)值為0.6
- shadow:在餅圖下面畫一個(gè)陰影,默認(rèn)值為False,即不畫陰影。
- labeldistance:標(biāo)記的繪制位置,相對(duì)于半徑的比例,默認(rèn)值為1.1,如設(shè)置值為90則從y軸正方向畫起。
- radius:餅圖半徑,默認(rèn)值為1
- counterclock:指定指針?lè)较?#xff0c;布爾型,可選參數(shù)。默認(rèn)值為True,表示逆時(shí)針;如果值為False,則表示順時(shí)針
- wedgeprops:字典類型,可選參數(shù),默認(rèn)值為None。字典傳遞給wedge對(duì)象,用來(lái)畫一個(gè)餅圖。例如wedgeprops={‘linewidth’:2}設(shè)置wedge線寬為2.
- textprops:設(shè)置標(biāo)簽和比例文字的格式,字典類型,可選參數(shù),默認(rèn)值為None。傳遞給text對(duì)象的字典參數(shù)
- center:浮點(diǎn)類型的列表,可選參數(shù),默認(rèn)值為(0,0),表示圖表中心位置。
- frame:布爾型,可選參數(shù),默認(rèn)值為False,不顯示框架(也就是網(wǎng)絡(luò));如果值為True,則顯示軸框架,與grid()函數(shù)配合使用。實(shí)際應(yīng)用中建議使用默認(rèn)設(shè)置,因?yàn)轱@示軸框架會(huì)干擾餅形圖效果。
- rotatelabels:布爾型,可選參數(shù),默認(rèn)值為False;如果值為True,則旋轉(zhuǎn)每個(gè)標(biāo)簽到指定的角度。
繪制簡(jiǎn)單餅形圖(18)
import matplotlib.pyplot as plt x = [2,5,12,70,2,9] plt.pie(x,autopct='%1.1f%%')1.基礎(chǔ)餅形圖(19)
- 通過(guò)餅形圖分析各地區(qū)銷量占比情況:
2.分裂餅形圖(20)
- 分裂餅形圖是將您認(rèn)為主要的餅圖部分分裂出來(lái),以達(dá)到突出顯示的目的。
- 將銷量占比量最多的廣東省分裂顯示,效果如下面第一個(gè)圖所示。分裂餅形圖可以同時(shí)分裂多塊,如下面第二個(gè)圖所示。
- 分裂餅圖主要是通過(guò)設(shè)置explode參數(shù)實(shí)現(xiàn),該參數(shù)用于設(shè)置餅圖距中心的距離,我們需要將哪塊餅圖分裂出來(lái),就設(shè)置它與中心的距離即可。例如,上圖中,我們將占比最多的”廣東省“分裂出來(lái),如上面第二個(gè)圖所示。廣東省排在第一位,那么就設(shè)置第一位距中心的距離為0.1,其他為0,關(guān)鍵代碼如下:
3.立體感帶陰影的餅形圖
- 立體感帶陰影的餅形圖看起來(lái)更美觀,效果如下圖所示:
- 立體感帶陰影的餅形圖主要通過(guò)shadow參數(shù)實(shí)現(xiàn),設(shè)置該參數(shù)值為True即可,主要代碼如下:
4.環(huán)形圖(21)
- 環(huán)形圖是由兩個(gè)及以上大小不一的餅圖在一起,挖去中間的部分所構(gòu)成的圖形,效果如下:
- 這里還是通過(guò)pie()函數(shù)實(shí)現(xiàn),一個(gè)關(guān)鍵參數(shù)wedgegroups,字典類型,用于設(shè)置餅形圖內(nèi)、外邊界的屬性,如環(huán)的寬度,環(huán)邊界顏色和寬度,主要代碼如下:
5.內(nèi)嵌環(huán)形圖(22)
- 內(nèi)嵌環(huán)形圖實(shí)際是雙環(huán)形圖,效果如下:
- 繪制嵌套環(huán)形圖需要注意以下三點(diǎn):
- (1)連續(xù)使用兩次pie()函數(shù)。
- (2)通過(guò)wedgeprops參數(shù)設(shè)置環(huán)形邊界。
- (3)通過(guò)radius參數(shù)設(shè)置不同的半徑。
- 另外,由于圖例內(nèi)容比較長(zhǎng),為了圖例能夠正常顯示,圖例代碼中引入了兩個(gè)主要參數(shù),即frameon和bboox_to_anchor。其中,frameon參數(shù)設(shè)置圖例有無(wú)邊框;bbox_to_anchor參數(shù)設(shè)置圖例位置,主要代碼如下:
5.6.5 繪制散點(diǎn)圖
- 散點(diǎn)圖主要用來(lái)查看數(shù)據(jù)的分布情況或相關(guān)性,一般在線性回歸分析中,查看數(shù)據(jù)點(diǎn)在坐標(biāo)系平面的分布情況。散點(diǎn)圖表示因變量隨自變量而變化的大致趨勢(shì),據(jù)此可以選擇合適的函數(shù)對(duì)數(shù)據(jù)進(jìn)行擬合。
- 散點(diǎn)圖與折線圖類似,也是一個(gè)個(gè)點(diǎn)構(gòu)成的。但不同之處在于,散點(diǎn)圖的各點(diǎn)之間不會(huì)按照前后關(guān)系以線條連接起來(lái)。
- Matplotlib繪制散點(diǎn)圖使用plot()函數(shù)和scatter()函數(shù)都可以實(shí)現(xiàn),本節(jié)使用scatter()函數(shù)繪制散點(diǎn)圖,scatter()函數(shù)專門用于繪制散點(diǎn)圖,使用方式和plot()函數(shù)類似,區(qū)別在于前者具有更高的靈活性,可以單獨(dú)控制每個(gè)散點(diǎn)與數(shù)據(jù)匹配,并讓每個(gè)散點(diǎn)具有不同的屬性。scatter()函數(shù)的語(yǔ)法如下:
- x,y:數(shù)據(jù)
- s:標(biāo)記大小,以平方磅為單位的標(biāo)記面積,設(shè)置值如下。數(shù)值標(biāo)量:以相同的大小繪制所有標(biāo)記。行或列向量:是每個(gè)標(biāo)記具有不同的大小。x、y和sz中的相應(yīng)元素確定每個(gè)標(biāo)記的位置和面積。sz的長(zhǎng)度必須等于x和y的長(zhǎng)度。[]:使用36平方磅的默認(rèn)面積。
- c:標(biāo)記顏色,可選參數(shù),默認(rèn)標(biāo)記顏色為藍(lán)色
- marker:標(biāo)記樣式,可選參數(shù),默認(rèn)值為’o’
- cmap:顏色地圖,可選參數(shù),默認(rèn)值為None
- norm:可選參數(shù),默認(rèn)值為None
- vmin,vmax:標(biāo)量,可選,默認(rèn)值為None
- alpha:透明度,可選參數(shù),0~1的數(shù),表示透明度,默認(rèn)值為None
- linewidths:線寬,標(biāo)記邊緣的寬度,可選參數(shù),默認(rèn)值為None
- verts:(x,y)的序列,可選參數(shù),如果參數(shù)marker為None,這些頂點(diǎn)將用于構(gòu)建標(biāo)記。標(biāo)記的中心位置為(0,0)
- edgecolors:輪廓顏色,與參數(shù)c類似,可選參數(shù),默認(rèn)值為None
- data:data關(guān)鍵字參數(shù)。如果給定一個(gè)數(shù)據(jù)參數(shù),所有位置和關(guān)鍵字參數(shù)將被替換
- **kwargs:關(guān)鍵字參數(shù),其他可選參數(shù)
繪制簡(jiǎn)單散點(diǎn)圖(23)
import matplotlib.pyplot as plt x=[1,2,3,4,5,6] y=[19,24,37,43,55,68] plt.scatter(x, y)散點(diǎn)圖分析銷售收入與廣告費(fèi)的相關(guān)性(24)
- 接下來(lái),繪制銷售收入與廣告費(fèi)散點(diǎn)圖,用以觀察銷售收入與廣告費(fèi)的相關(guān)性:
5.6.6 繪制面積圖
- 面積圖用于體現(xiàn)數(shù)量隨時(shí)間而變化的程度,也可以用于引起人們對(duì)總值趨勢(shì)的注意。例如,表示隨時(shí)間而變化的利潤(rùn)的數(shù)據(jù)可以繪制在面積圖中,以強(qiáng)調(diào)總利潤(rùn)。
- Matplotlib繪制面積圖主要使用stackplot()函數(shù),語(yǔ)法如下:
- x:x軸數(shù)據(jù)
- args:當(dāng)傳入的參數(shù)個(gè)數(shù)未知時(shí)使用args。這里指y軸數(shù)據(jù)可以傳入多個(gè)y軸。
- data:data關(guān)鍵字參數(shù)。如果給定一個(gè)數(shù)據(jù)參數(shù),所有位置和關(guān)鍵字參數(shù)將被替換。
- **kwargs:關(guān)鍵字參數(shù),其他可選參數(shù),如color(顏色)、alpha(透明度)等。
繪制簡(jiǎn)單面積圖(25)
import matplotlib.pyplot as plt x = [1,2,3,4,5] y1 =[6,9,5,8,4] y2 = [3,2,5,4,3] y3 =[8,7,8,4,3] y4 = [7,4,6,7,12] plt.stackplot(x, y1,y2,y3,y4, colors=['g','c','r','b'])- 面積圖也有很多種,如標(biāo)準(zhǔn)面積圖、堆疊面積圖和百分比堆疊面積圖等。下面主要介紹標(biāo)準(zhǔn)堆疊面積圖。
1.標(biāo)準(zhǔn)面積圖(26)
- 通過(guò)標(biāo)準(zhǔn)面積圖分析2013-2019年線上圖書銷售情況,通過(guò)該圖可以看出每一年線上圖書銷售的一個(gè)趨勢(shì):
2.堆疊面積圖(27)
- 通過(guò)堆疊面積圖分析2013-2019年線上各平臺(tái)圖書銷售情況。堆疊圖不僅可以看到各平臺(tái)每年銷售變化趨勢(shì),通過(guò)將各平臺(tái)數(shù)據(jù)堆疊到一起還可以看到整體的變化趨勢(shì)。
- 實(shí)現(xiàn)堆疊面積圖的關(guān)鍵在于增加y軸,通過(guò)增加多個(gè)y軸數(shù)據(jù),形成堆疊面積圖,代碼如下:
5.6.7 繪制熱力圖
- 熱力圖是通過(guò)密度函數(shù)進(jìn)行可視化用于表示地圖中的密度的熱圖。它使人們能夠獨(dú)立于縮放因子感知點(diǎn)的密度。熱力圖可以顯示不可點(diǎn)擊區(qū)域發(fā)生的事情。利用熱力圖可以看到數(shù)據(jù)表里多個(gè)特征兩兩的相似度。例如,以特殊高亮的形式顯示訪客熱衷的頁(yè)面區(qū)域和訪客所在的地理區(qū)域的圖示。熱力圖在網(wǎng)頁(yè)分析、業(yè)務(wù)數(shù)據(jù)分析等其他領(lǐng)域也有較為廣泛的應(yīng)用。
繪制簡(jiǎn)單熱力圖(28)
- 熱力圖是數(shù)據(jù)分析的常用方法,通過(guò)色差、亮度來(lái)展示數(shù)據(jù)的差異,易于理解。
- 上述代碼中,plt.imshow(X)中傳入的數(shù)組X=[[1,2],[3,4],[5,6],[7,8],[9,10]]為顏色的對(duì)應(yīng)值,按照矩陣X進(jìn)行顏色分布,如左上角顏色為深藍(lán),右下角顏色為黃色,其對(duì)應(yīng)值為10,具體如下:
熱力圖對(duì)比分析學(xué)生各科成績(jī)(29)
- 根據(jù)學(xué)生成績(jī)統(tǒng)計(jì)數(shù)據(jù)繪制熱力圖,通過(guò)熱力圖直觀地對(duì)比每名學(xué)生各科成績(jī)的高低。程序代碼如下:
- 從上圖可知,顏色以高亮顯示的,成績(jī)?cè)礁?#xff1b;反之,成績(jī)?cè)降汀?/li>
5.6.9 繪制箱形圖
- 箱型圖又稱箱線圖、盒須圖或盒式圖,它是一種顯示一組數(shù)據(jù)分散情況下的資料的統(tǒng)計(jì)圖。因形狀像箱子而得名。箱形圖最大的優(yōu)點(diǎn)就是不受異常值的影響,可以以一種相對(duì)穩(wěn)定的方式描述數(shù)據(jù)的離散程度分布情況,因此在各種領(lǐng)域經(jīng)常被使用。另外,箱形圖也常用于異常值的識(shí)別。Matplotlib繪制箱型圖主要使用boxplot()函數(shù),語(yǔ)法如下:
- x:指定要繪制箱型圖的數(shù)據(jù)
- notch:是否以凹口的形式展現(xiàn)箱形圖,默認(rèn)非凹口
- sym:指定異常點(diǎn)的形狀,默認(rèn)為加號(hào)(+)顯示
- vert:是否需要將箱形圖垂直擺放,默認(rèn)垂直擺放
- whis:指定上下限于與上下四分位的距離,默認(rèn)為1.5倍的四分位差。
- position:指定箱形圖的位置,默認(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è)置箱體的屬性,如異常點(diǎn)的形狀、大小、填充色等。
- medianprops:設(shè)置中位數(shù)的屬性,如線的類型、粗細(xì)等。
- meanprops:設(shè)置均值的屬性,如點(diǎn)的大小、顏色等。
- capprops:設(shè)置箱形圖頂端和末端線條的屬性,如顏色、粗細(xì)等。
- whiskerprops:設(shè)置須的屬性,如顏色、粗細(xì)等。
繪制簡(jiǎn)單箱形圖(30)
import matplotlib.pyplot as plt x=[1,2,3,5,7,9] plt.boxplot(x)繪制多組數(shù)據(jù)的箱形圖(31)
- 上述舉例是一組數(shù)據(jù)的箱形圖,還可以繪制多組數(shù)據(jù)的箱形圖,需要指定多組數(shù)據(jù)。例如,為三組數(shù)據(jù)繪制箱形圖,程序代碼如下:
- 箱形圖將數(shù)據(jù)切割分離(實(shí)際上就是將數(shù)據(jù)分為4大部分),如圖5.57所示。
- 下面介紹箱形圖每部分具體含義以及如何通過(guò)箱形圖識(shí)別異常值。
- 下四分位:圖5.57中的下四分位數(shù)指的是數(shù)據(jù)的25%分位點(diǎn)所對(duì)應(yīng)的值(Q1)。計(jì)算分位數(shù)可以使用Pandas的quantile()函數(shù)。例如,Q1=df[‘總消費(fèi)’].quantile(q=0.25)。
- 中位數(shù):中位數(shù)即為數(shù)據(jù)的50%分位點(diǎn)所對(duì)應(yīng)的值(Q2)
- 上四分位數(shù):上四分位數(shù)則為數(shù)據(jù)的75%分位點(diǎn)所對(duì)應(yīng)的值(Q3)
- 上限:上線的計(jì)算公式為Q3+1.5(Q3-Q1)
- 下限:上線的計(jì)算公式為Q1-1.5(Q3-Q1)
- 其中Q3-Q1表示四分位差。如果使用箱形圖識(shí)別異常值,其判斷標(biāo)準(zhǔn)是,當(dāng)變量的數(shù)據(jù)值大于箱形圖的上限或者小于箱形圖的下限時(shí),就可以將這樣的數(shù)據(jù)判定為異常值。
- 下面了解以下判斷異常值的算法,如圖5.58所示。
通過(guò)箱形圖判斷異常值(32)
- 通過(guò)箱形圖查找客人總消費(fèi)數(shù)據(jù)中存在的異常值,程序代碼如下:
5.6.9 繪制3D圖表
- 3D圖表有立體感也比較美觀,看起來(lái)更加“高大上”。下面介紹兩種3D圖表,即三維柱形圖和三維曲面圖。
- 繪制3D圖表,我們?nèi)允褂肕atplotlib,但需要安裝mpl_toolkits工具包,使用pip安裝命令:
- 安裝好這個(gè)模塊后,即可調(diào)用mpl_tookits下的mplot3d類進(jìn)行3D圖表的繪制。
1. 3D柱形圖(33)
import matplotlib.pyplot as plt from mpl_toolkits.mplot3d.axes3d import Axes3D import numpy as np fig = plt.figure() axes3d = Axes3D(fig) zs = [1, 5, 10, 15, 20] for z in zs:x = np.arange(0, 10)y = np.random.randint(0, 30, size=10)axes3d.bar(x, y, zs=z, zdir='x', color=['r', 'green', 'yellow', 'c'])2. 3D曲面圖(34)
import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() ax = Axes3D(fig) delta = 0.125 # 生成代表X軸數(shù)據(jù)的列表 x = np.arange(-4.0, 4.0, delta) # 生成代表Y軸數(shù)據(jù)的列表 y = np.arange(-3.0, 4.0, delta) # 對(duì)x、y數(shù)據(jù)執(zhí)行網(wǎng)格化 X, Y = np.meshgrid(x, y) Z1 = np.exp(-X**2 - Y**2) Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2) # 計(jì)算Z軸數(shù)據(jù)(高度數(shù)據(jù)) Z = (Z1 - Z2) * 2 # 繪制3D圖形 ax.plot_surface(X, Y, Z,rstride=1, # rstride(row)指定行的跨度cstride=1, # cstride(column)指定列的跨度cmap=plt.get_cmap('rainbow')) # 設(shè)置顏色映射 # 設(shè)置Z軸范圍 ax.set_zlim(-2, 2)5.6.10 繪制多個(gè)圖表
- Matplotlib可以實(shí)現(xiàn)在一張圖表上繪制多個(gè)子圖表。Matplotlib提供了3種方法:一是subplot()函數(shù);二是subplots()函數(shù);三是add_subplots()函數(shù),下面分別介紹:
1.subplot()函數(shù)
- subplot()函數(shù)直接指定劃分方式和位置,它可以將一個(gè)繪圖區(qū)域劃分為n個(gè)子圖,每個(gè)subplot()函數(shù)只能繪制一個(gè)子圖。語(yǔ)法如下:
- args:當(dāng)傳入的參數(shù)個(gè)數(shù)未知時(shí)使用args
- **kwargs:關(guān)鍵字參數(shù),其他可選參數(shù)
- 例如,繪制一個(gè)2x3的區(qū)域,subplot(2,3,3),將畫布分成2行3列在第3個(gè)區(qū)域中繪制,用坐標(biāo)表示如下:
- 如果行列的值都小于10,那么可以把它們縮寫成一個(gè)整數(shù),如subplot(233)。
- 另外,subplot()函數(shù)在指定的區(qū)域中創(chuàng)建一個(gè)軸對(duì)象,如果新創(chuàng)建的軸和之前所創(chuàng)建的軸重疊,那么,之前的軸將被刪除。
使用subplot()函數(shù)繪制多個(gè)子圖的空?qǐng)D表(35)
- 繪制一個(gè)2x3包含6個(gè)子圖的空?qǐng)D表,程序代碼如下:
繪制包含多個(gè)子圖的圖表(36)
- 通過(guò)上述舉例了解了subplot()函數(shù)的基本用法,接下來(lái)將前面所學(xué)的簡(jiǎn)單圖表整合到一張圖表上,結(jié)果如下圖所示:
圖5.65
- 上述舉例,以下兩個(gè)關(guān)鍵點(diǎn)一定要掌握。
- (1)每繪制一個(gè)子圖表都要調(diào)用一次subplot()函數(shù)
- (2)繪圖區(qū)域位置編號(hào)
- subplot()函數(shù)的前面兩個(gè)參數(shù)指定的是一個(gè)畫布被分割成的行數(shù)和列數(shù),后面一個(gè)參數(shù)則指的是當(dāng)前繪制區(qū)域位置編號(hào),編號(hào)規(guī)則是行優(yōu)先。
- 例如,圖5.64中有3個(gè)子圖表,第1個(gè)子圖表subplot(2,2,1),即將畫布分成2行2列,在第1個(gè)子圖中繪制折線圖;第二子圖表subplot(2,2,2),將畫布分成2行2列,在第二個(gè)子圖中繪制散點(diǎn)圖;第3個(gè)子圖表subplot(2,1,2),將畫布分成2行1列,由于第1行已經(jīng)占用了,所以在第2行也就是第3個(gè)子圖中繪制柱形圖。示意圖如圖5.65所示。
- subplot()函數(shù)在畫布中繪圖時(shí),每次都要調(diào)用它指定繪圖區(qū)域非常麻煩,而subplots()函數(shù)則更直接,它會(huì)事先把畫布區(qū)域分割好。下面介紹subplots()函數(shù)。
2.subplots()函數(shù)
- subplots()函數(shù)用于創(chuàng)建畫布和子圖,語(yǔ)法如下:
- nrows和ncols:表示將畫布分割成幾行幾列,例如,nrows=2、ncols=2表示將畫布分割成2行2列,起始值均為0。當(dāng)調(diào)用畫布中的坐標(biāo)軸時(shí),ax[0,0]表示調(diào)用左上角的坐標(biāo),ax[1,1]表示調(diào)用右下角的坐標(biāo)。
- sharex和sharey:布爾值或者值為“none”“all”“row”“col”,默認(rèn)值為False。用于控制x或y軸之間的屬性共享。具體參數(shù)值說(shuō)明如下。
– True或者“all”:表示x或y軸屬性在所有子圖中共享。
– False或者“none”:表示每個(gè)子圖的x或y軸都是獨(dú)立的部分。
– row:表示每個(gè)子圖在一個(gè)x或y軸上共享行(row)
– col:表示每個(gè)子圖在一個(gè)x或y軸上共享列(column) - squeeze:布爾值,默認(rèn)值為True,額外的維度從返回的axes(軸)對(duì)象中擠出,對(duì)應(yīng)nx1或1xn個(gè)子圖,返回一個(gè)一維數(shù)組,對(duì)于nxm,n>1和m>1返回一個(gè)二維數(shù)組;如果值為False,則表示不進(jìn)行擠壓操作,返回一個(gè)元素為Axes實(shí)例的二維數(shù)組,即使它最終是1x1
- subplot_kw:字典類型,可選參數(shù)。把字典的關(guān)鍵字傳遞給add_subplot()函數(shù)來(lái)創(chuàng)建每個(gè)子圖。
- gridspec_kw:字典類型,可選參數(shù)。把字典的關(guān)鍵字傳遞給GridSpec()構(gòu)造函數(shù)創(chuàng)建網(wǎng)格區(qū)域,然后將子圖放在網(wǎng)格(grid)里。
- **fig_kw:把所有詳細(xì)的關(guān)鍵字參數(shù)傳遞給figure
使用subplots()函數(shù)繪制多子圖的空?qǐng)D表(37)
- 繪制一個(gè)2x3包含6個(gè)子圖的空?qǐng)D表,使用subplots()函數(shù)只需3行代碼:
- 上述代碼中,figure和axes是兩個(gè)關(guān)鍵點(diǎn)。
- figure:繪制圖表的畫布。
- axes:坐標(biāo)軸對(duì)象,可以理解為在figure(畫布)上繪制坐標(biāo)軸對(duì)象,它幫我們規(guī)劃出了一個(gè)科學(xué)作圖的坐標(biāo)軸系統(tǒng)。
- 通過(guò)上面可以明白,外面的是畫布(figure),里面帶坐標(biāo)軸的是坐標(biāo)軸對(duì)象(axes)。
使用subplots()函數(shù)繪制多子圖圖表(38)
- 使用subplots()函數(shù)將前面所學(xué)的簡(jiǎn)單圖表整合到一張圖表上,結(jié)果如圖所示:
3.add_subplot()函數(shù)
- add_subplot()函數(shù)也可以實(shí)現(xiàn)在一張圖上繪制多個(gè)子圖表,用法與subplot()基本相同,先來(lái)看下列一段代碼:
- 上述代碼同樣是繪制一個(gè)2x3包含6個(gè)子圖的空?qǐng)D表。首先創(chuàng)建一個(gè)figure實(shí)例(畫布),然后通過(guò)ax1=fig.add_subplot(2,3,1)創(chuàng)建第1個(gè)子圖表,返回Axes實(shí)例(坐標(biāo)軸對(duì)象),第1個(gè)參數(shù)為行數(shù),第2個(gè)參數(shù)為列數(shù),第3個(gè)參數(shù)為子圖表的位置。
- 以上用3中方法實(shí)現(xiàn)了在一張圖上繪制多個(gè)子圖表,3中方法各有所長(zhǎng)。subplot()函數(shù)和add_subplot()函數(shù)比較靈活,定制化效果比較好,可以實(shí)現(xiàn)子圖表在圖中的各種布局(如一張圖上可以隨意擺放3個(gè)或5個(gè)圖表);而subplots()函數(shù)較為不靈活,但它可以用較少的代碼實(shí)現(xiàn)繪制多個(gè)子圖表。
5.6.11 圖表的保存
- 實(shí)際工作中,有時(shí)需要將繪制的圖表保存為圖片放置到報(bào)告中。Matplotlib的savefig()函數(shù)可以實(shí)現(xiàn)這一功能,將圖表保存為JPEG、TIFF或PNG格式的圖片。
- 例如,保存之前繪制的折線圖,主要代碼如下:
- 需要注意一個(gè)關(guān)鍵問(wèn)題,保存代碼必須在圖表預(yù)覽前,也就是plt.show()代碼前;否則保存后的圖片是白色,圖表無(wú)法保存。
5.7 綜合應(yīng)用
5.7.1 雙y軸可視化數(shù)據(jù)分析圖表的實(shí)現(xiàn)
- 雙y軸顧名思義就是兩個(gè)y軸,其特點(diǎn)是通過(guò)雙y軸看出發(fā)展情況的同時(shí)還可以看到其增長(zhǎng)速度。對(duì)于產(chǎn)品而言,通過(guò)此圖可以看到產(chǎn)品銷量的同時(shí)還可以看到產(chǎn)品增長(zhǎng)率,效果如下:
5.7.2 顏色漸變餅形圖的實(shí)現(xiàn)
from matplotlib import font_manager as fm import pandas as pd import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei'] #解決中文亂碼 plt.style.use('ggplot') #設(shè)置背景樣式,https://blog.csdn.net/qq_22592457/article/details/105636480 from matplotlib import cm #原始數(shù)據(jù) shapes = ['天津', '江西省', '安徽省', '云南省', '福建省', '河南省', '遼寧省','重慶', '湖南省', '四川省', '北京', '上海', '廣西壯族自治區(qū)', '河北省','浙江省', '江蘇省', '湖北省', '山東省', '廣東省'] values = [287,383,842,866,1187,1405,1495,1620,1717,2313,2378,3070,4332,5841,6482,7785,9358,9818,20254] explode=[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] s = pd.Series(values, index=shapes) labels = s.index sizes = s.values fig, ax = plt.subplots(figsize=(6,6)) # 設(shè)置繪圖區(qū)域大小 # 繪制彩虹圖,https://blog.csdn.net/weixin_48964486/article/details/124144183 colors = cm.rainbow(np.arange(len(sizes))/len(sizes)) # 顏色地圖:秋天→彩虹→灰色→春天→黑色 patches, texts, autotexts = ax.pie(sizes, labels=labels, autopct='%1.0f%%',shadow=False, startangle=170, colors=colors) ax.axis('equal') ax.set_title('各地區(qū)線上圖書銷售占比圖',loc='left') # 重新設(shè)置字體大小 proptease = fm.FontProperties() # 字體大小(從小到大): xx-small、x-small、small、medium、large、x-large、xx-large,或者是數(shù)字,如18 proptease.set_size('small') plt.setp(autotexts, fontproperties=proptease) plt.setp(texts, fontproperties=proptease) plt.show()- 如果畫分裂餅形圖,可在本文搜索關(guān)鍵詞“分裂餅形圖”。
- 顏色漸變主要使用了Matplotlib內(nèi)置顏色地圖模塊cm,在該模塊中指定一組數(shù)據(jù)可以生成多種顏色,由淺入深。例如,漸變藍(lán)色,cmap=plt.cm.Blues。
5.7.3 等高線圖的實(shí)現(xiàn)
- 等高線圖是地理課中講述山峰山谷時(shí)繪制的圖形,在機(jī)器學(xué)習(xí)中也會(huì)被用在繪制梯度下降算法的圖形中。等高線圖實(shí)現(xiàn)結(jié)果如下圖所示:
- 關(guān)鍵代碼解析:需畫出等高線,核心函數(shù)是Matplotlib的coutourf()函數(shù),但該函數(shù)中參數(shù)x和y對(duì)應(yīng)的值是二維數(shù)據(jù),因此需要使用NumPy的meshgrid()函數(shù)將x和y值轉(zhuǎn)換成二維數(shù)據(jù),代碼如下:
5.8 小 節(jié)
- 數(shù)據(jù)統(tǒng)計(jì)的再好都不如一張圖表清晰、直觀。本章用大量的舉例詳細(xì)地介紹了Matplotlib圖表,其根本在于能夠使讀者全面透徹地了解和掌握最基礎(chǔ)的圖表,并應(yīng)用到實(shí)際數(shù)據(jù)統(tǒng)計(jì)工作中,同時(shí)也為以后學(xué)習(xí)其他繪圖庫(kù)奠定堅(jiān)實(shí)的基礎(chǔ)。
總結(jié)
以上是生活随笔為你收集整理的Matplotlib可视化数据分析图表下(常用图表的绘制、折线图、柱形图、直方图、饼形图、散点图、面积图、热力图、箱形图、3D图表、绘制多个图表、双y轴可视化图表、颜色渐变图)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Web数据存储之localStorage
- 下一篇: 如何截获打印机文件_打印、复印还不会,如