普通高中選課數(shù)據(jù)分析和可視化(2)
前情回顧:



#調(diào)用DataFrame.plot方法繪制各校各科人數(shù)柱狀圖(去除總?cè)藬?shù))#將索引更名為學(xué)校代碼,以便更好顯示橫坐標(biāo)sc = sc.rename(index={i:school[i] for i in sc.index})sc[kms[1:]].plot(kind='bar',rot=0, stacked=True)#調(diào)用DataFrame.plot方法分別繪制各校各科人數(shù)柱狀圖(包含總?cè)藬?shù))colors = ('purple', 'red','green','orange','cyan','lime','gold','blue')col = m // 3 #最大列數(shù)n = (len(school)+col-1) // col #最大行數(shù)#劃分子圖,分成n*col個(gè)區(qū)域,并設(shè)置各個(gè)子圖的寬、高和繪圖分辨率fig, axes = plt.subplots(n, col,figsize=(8, 12), dpi=80)for i, k in enumerate(school, start=0): #遍歷每一所學(xué)校,繪制各校選課人數(shù)餅圖plt.subplots_adjust(hspace = 0.4) #為子圖之間的空間保留的高度for j, km in enumerate(kms, start=0):axes[i//col,i%col].bar(km, sc.loc[k][km], color=colors[j])axes[i//col,i%col].set_title("學(xué)校"+k+"各科人數(shù)") #為每個(gè)子圖設(shè)置標(biāo)題plt.show()


#根據(jù)子圖的行列數(shù)、編號、標(biāo)題、顏色、變量列表、角度列表、數(shù)據(jù)列表、圖例標(biāo)簽和極徑范圍繪制雷達(dá)圖def draw_polar(rows, cols, num, title, color, categories, angles, values, label, rlim):# 初始化極坐標(biāo)網(wǎng)格ax = plt.subplot(rows, cols, num, projection='polar')ax.set_rlabel_position(0) #于設(shè)置極徑標(biāo)簽顯示位置ax.set_rlim(0, rlim) #設(shè)置顯示的極徑范圍# If you want the first axis to be on top:ax.set_theta_offset(pi / 2)# 設(shè)置角度偏移ax.set_theta_direction(-1)# 設(shè)置順時(shí)針還是逆時(shí)針,1或者-1# 設(shè)置標(biāo)簽plt.xticks(angles[:-1], categories)plt.yticks([i for i in range(100, rlim, 100)], [str(i) for i in range(100, rlim, 100)], color="grey", size=7)# 繪制雷達(dá)圖ax.plot(angles, values, linewidth=1, linestyle='solid', label=label)ax.fill(angles, values, color, alpha=0.1)plt.title(title, size=11, color=color, y=1.2)


#繪制各???cè)藬?shù)占比餅圖labels = [str(i)[-2:] for i in sc['學(xué)校代碼']]sizes = sc['人數(shù)'].valuesexplode = [0] * len(sizes)plt.pie(sizes,explode=explode,labels=labels,autopct='%1.1f%%',shadow=False,startangle=150)plt.title("各???cè)藬?shù)占比餅圖")plt.axis('equal') #該行代碼使餅圖長寬相等#分別繪制各校各科人數(shù)占比餅圖col = m // 3 #最大列數(shù)n = (len(school)+col-1) // col #最大行數(shù)#劃分子圖,分成n*col個(gè)區(qū)域,并設(shè)置各個(gè)子圖的寬、高和繪圖分辨率fig, axes = plt.subplots(n, col,figsize=(8, 8), dpi=100)for i, k in enumerate(school, start=0): #遍歷每一所學(xué)校,繪制各校選課人數(shù)餅圖labels = kms #(每一塊)餅圖外側(cè)顯示的說明文字sizes = sc.iloc[i].values[2:] #(每一塊)的比例,如果sum(x) > 1會(huì)使用sum(x)歸一化explode = [0] * len(sizes) #(每一塊)離開中心距離axes[i//col,i%col].pie(sizes,explode=explode,labels=labels,autopct='%1.1f%%',shadow=False,startangle=150)axes[i//col,i%col].set_title("學(xué)校"+k+"各科人數(shù)占比餅圖") #為每個(gè)子圖設(shè)置標(biāo)題plt.show()
說明:因?yàn)楸卷?xiàng)目內(nèi)容較多,故寫成系列文章分成多次分享,請大家稍安勿躁哦。
需要本文word版或者相關(guān)源代碼的,可以加入“Python算法之旅”知識星球參與討論和下載文件,“Python算法之旅”知識星球匯集了數(shù)量眾多的同好,更多有趣的話題在這里討論,更多有用的資料在這里分享。
我們專注Python算法,感興趣就一起來!
相關(guān)優(yōu)秀文章:
斌哥教你自制多功能單詞本
普通高中選課數(shù)據(jù)分析和可視化(1)
評論
圖片
表情
