Python+matplotlib繪制餅圖和堆疊圖
餅圖常用于統(tǒng)計(jì)學(xué)模塊,畫(huà)餅圖用到的方法為:pie( )
一、pie()函數(shù)用來(lái)繪制餅圖
pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=0, 0, frame=False, rotatelabels=False, *, normalize=None, data=None)
pie()函數(shù)參數(shù)較多,需要我們調(diào)整的常見(jiàn)為以下幾個(gè)
x: 每個(gè)扇形的占比的序列或數(shù)組
explode :如果不是None,則是一個(gè)len(x)長(zhǎng)度的數(shù)組,指定每一塊的突出程度;突出顯示,設(shè)置每一塊分割出來(lái)的間隙大小
labels:為每個(gè)扇形提供標(biāo)簽的字符串序列
colors:為每個(gè)扇形提供顏色的字符串序列
autopct :如果是一個(gè)格式字符串,標(biāo)簽將是fmt % pct。如果是一個(gè)函數(shù),它將被調(diào)用。
shadow:陰影
startangle:從x軸逆時(shí)針旋轉(zhuǎn),餅的旋轉(zhuǎn)角度 參數(shù)用法,可以去官網(wǎng)查詢(xún),并自己多去償試。
二、一個(gè)簡(jiǎn)單的例子
統(tǒng)計(jì)每天休息、工作、娛樂(lè)等時(shí)間的百分比
import matplotlib.pyplot as plt slices = [7,2,9,3,3] activities = ['sleeping','eating','working','studing','playing'] cols = ['r','m','y','c','b'] plt.pie(slices, labels=activities, colors=cols, #自定義的顏色序列,對(duì)比slices,可多可少,少時(shí)自動(dòng)補(bǔ)充,如沒(méi)有,則默認(rèn)不同顏色。 startangle=90, shadow= True, explode=(0,0.1,0,0,0.2),#占比突出程度, autopct='%1.1f%%' #百分比的顯示格式 ) plt.title('Time statistics') plt.show()
實(shí)際運(yùn)行結(jié)果:
注意:startangle=90時(shí)的開(kāi)始位置。整個(gè)餅圖是從0度(圓心向右方向)逆時(shí)針?lè)植嫉摹?/p>
那繼續(xù)用上篇?jiǎng)?chuàng)建的2個(gè)色子,來(lái)實(shí)現(xiàn)一個(gè)餅圖。
思考:上述餅圖代碼中最能決定餅圖形狀的參數(shù)是slices = [7,2,9,3,3],在不考慮每個(gè)占比名稱(chēng)、美觀等的情況下,先確定如何實(shí)現(xiàn)slices中的各數(shù)值。
比如,當(dāng)投擲2粒色子(一個(gè)8個(gè)面,一個(gè)6個(gè)面)時(shí),1000000次時(shí),分別統(tǒng)計(jì)出現(xiàn)點(diǎn)1、2、3、4、5……14的總次數(shù),保存到slices中即可。用數(shù)列中的統(tǒng)計(jì)方法 list.count()即可。
主要就是增加兩行代碼:
new_slices=[] # 新建一個(gè)數(shù)列 while side <= max_result: side += 1 new_bins.append(side) #這是之前做柱狀圖需要用到的 new_slices.append( results.count(int(side)) ) #將保存兩色子之和的數(shù)列,直接進(jìn)行統(tǒng)計(jì),results.count(int(side))就是在results的數(shù)列中統(tǒng)計(jì)出現(xiàn)side的次數(shù)。
運(yùn)行結(jié)果,一樣也是顯示出點(diǎn)數(shù)之和7,8,9的出現(xiàn)的次數(shù)最多,然后逐漸減?。?/p>
總之,餅圖通過(guò)將一個(gè)圓按照分類(lèi)的占比劃分成多個(gè)區(qū)塊,整個(gè)圓餅代表數(shù)據(jù)的總量,每個(gè)區(qū)塊表示該分類(lèi)占總體的比例大小,所有區(qū)塊的加和等于100%。
三、 堆疊圖
使用matplotlib中的stackplot()函數(shù)可以快速繪制堆積圖,stackplot()函數(shù)的語(yǔ)法格式如下所示
stackplot(x, y, labels=(), baseling='zero', data=None, *args, **kwargs)
該函數(shù)常用參數(shù)的含義如下
x:表示x軸的數(shù)據(jù),可以是一維數(shù)組。
y:表示y軸的數(shù)據(jù),可以是二維數(shù)組或一維數(shù)組序列。
labels:表示每組折線及填充區(qū)域的標(biāo)簽。
baseline:表示計(jì)算基線的方法,包括'zero'、'sym'、'wiggle'和'weighted_wiggle'。
其中:
'zero'表示恒定零基線,即簡(jiǎn)單的堆積圖;
'sym'表示對(duì)稱(chēng)于零基線;
'wiggle'表示最小化平方斜率的總和;
'weighted_wiggle'表示執(zhí)行相同的操作,但權(quán)重用于說(shuō)明每層的大小。
用同一個(gè)例子來(lái)看一下堆疊圖的效果,代碼如下:
import matplotlib.pyplot as plt days = [1,2,3,4,5,6,7] sleeping =[7,8,6,8,7,8,6] eating = [2,3,3,3,2,2,2] working = [7,7,7,8,10,3,4] studing = [6,4,4,4,3,8,11] playing = [2,2,4,1,2,3,1] labellist = ['sleeping','eating','working','studing','playing'] colorlist = ['c','y','b','r','g'] plt.stackplot(days, sleeping,eating,working,studing,playing,labels=labellist,colors=colorlist) plt.xlabel('x') plt.ylabel('y') plt.legend(loc=(0.07, 0.05)) plt.title('Stack Plots') plt.show()
運(yùn)行結(jié)果如下:
plt.legend()是顯示左下角的標(biāo)簽。而語(yǔ)句plt.stackplot()函數(shù)中的sleeping,eating,working,studing,playing是一維數(shù)組序列,即stackplot(x,y……)中的y值,是一系列一維數(shù)據(jù)。
很明顯,通過(guò)上述餅圖與堆疊圖的對(duì)比,它們的區(qū)別:餅圖只能展示一段時(shí)間里,某個(gè)項(xiàng)目所花時(shí)間占總時(shí)間的比,而堆疊圖可以展示這一段時(shí)間里,每天各項(xiàng)所花費(fèi)時(shí)間。
既然sleeping,eating,working,studing,playing形成的一維數(shù)組,感覺(jué)參數(shù)比較多,那直接形成一個(gè)二維數(shù)組如何?做如下修改:
days = [1,2,3,4,5,6,7] """ sleeping =[7,8,6,8,7,8,6] eating = [2,3,3,3,2,2,2] working = [7,7,7,8,10,3,4] studing = [6,4,4,4,3,8,11] playing = [2,2,4,1,2,3,1] """ times =[ # 二維數(shù)組,以數(shù)列作為元素的數(shù)列。 [7,8,6,8,7,8,6], #上述sleeping數(shù)列 [2,3,3,3,2,2,2], [7,7,7,8,10,3,4], [6,4,4,4,3,8,11], [2,2,4,1,2,3,1] ] plt.stackplot(days, times,labels=labellist,colors=colorlist)
運(yùn)行結(jié)果如圖:
效果與原來(lái)的一維數(shù)組一樣。
但手工這樣編程的時(shí)候錄入數(shù)據(jù)太過(guò)麻煩,下篇介紹直接讀取文件數(shù)據(jù)并進(jìn)行處理。
以上就是Python+matplotlib繪制餅圖和堆疊圖的詳細(xì)內(nèi)容,更多關(guān)于Python matplotlib餅圖 堆疊圖的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Python數(shù)據(jù)分析之?Matplotlib?餅圖繪制
- Python+matplotlib實(shí)現(xiàn)餅圖的繪制
- Python利用matplotlib實(shí)現(xiàn)餅圖繪制
- python matplotlib模塊基本圖形繪制方法小結(jié)【直線,曲線,直方圖,餅圖等】
- python通過(guò)matplotlib生成復(fù)合餅圖
- python使用Matplotlib畫(huà)餅圖
- Python通過(guò)matplotlib畫(huà)雙層餅圖及環(huán)形圖簡(jiǎn)單示例
- python利用matplotlib庫(kù)繪制餅圖的方法示例
- Python 如何利用pandas和matplotlib繪制餅圖
相關(guān)文章
Python用requests庫(kù)爬取返回為空的解決辦法
這篇文章主要介紹了Python用requests庫(kù)爬取返回為空的解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02Python類(lèi)綁定方法及非綁定方法實(shí)例解析
這篇文章主要介紹了Python類(lèi)綁定方法及非綁定方法實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10使用Python操作FTP實(shí)現(xiàn)上傳和下載的方法
今天小編就為大家分享一篇關(guān)于使用Python操作FTP實(shí)現(xiàn)上傳和下載的方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-04-04Python DataFrame 設(shè)置輸出不顯示index(索引)值的方法
今天小編就為大家分享一篇Python DataFrame 設(shè)置輸出不顯示index(索引)值的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06選擇python進(jìn)行數(shù)據(jù)分析的理由和優(yōu)勢(shì)
在本篇文章中小編給大家整理了關(guān)于選擇python進(jìn)行數(shù)據(jù)分析的理由和優(yōu)勢(shì),對(duì)此有需要的朋友們可以跟著學(xué)習(xí)參考下。2019-06-06Python使用列表和字典實(shí)現(xiàn)簡(jiǎn)單的考試系統(tǒng)詳解
這篇文章主要介紹了Python使用列表和字典實(shí)現(xiàn)簡(jiǎn)單的考試系統(tǒng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-01-01淺談如何使用python抓取網(wǎng)頁(yè)中的動(dòng)態(tài)數(shù)據(jù)實(shí)現(xiàn)
這篇文章主要介紹了淺談如何使用python抓取網(wǎng)頁(yè)中的動(dòng)態(tài)數(shù)據(jù)實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08