普通高中选课数据分析和可视化(2)
前情回顾:



#调用DataFrame.plot方法绘制各校各科人数柱状图(去除总人数)#将索引更名为学校代码,以便更好显示横坐标sc = sc.rename(index={i:school[i] for i in sc.index})sc[kms[1:]].plot(kind='bar',rot=0, stacked=True)#调用DataFrame.plot方法分别绘制各校各科人数柱状图(包含总人数)colors = ('purple', 'red','green','orange','cyan','lime','gold','blue')col = m // 3 #最大列数n = (len(school)+col-1) // col #最大行数#划分子图,分成n*col个区域,并设置各个子图的宽、高和绘图分辨率fig, axes = plt.subplots(n, col,figsize=(8, 12), dpi=80)for i, k in enumerate(school, start=0): #遍历每一所学校,绘制各校选课人数饼图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("学校"+k+"各科人数") #为每个子图设置标题plt.show()


#根据子图的行列数、编号、标题、颜色、变量列表、角度列表、数据列表、图例标签和极径范围绘制雷达图def draw_polar(rows, cols, num, title, color, categories, angles, values, label, rlim):# 初始化极坐标网格ax = plt.subplot(rows, cols, num, projection='polar')ax.set_rlabel_position(0) #于设置极径标签显示位置ax.set_rlim(0, rlim) #设置显示的极径范围# If you want the first axis to be on top:ax.set_theta_offset(pi / 2)# 设置角度偏移ax.set_theta_direction(-1)# 设置顺时针还是逆时针,1或者-1# 设置标签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)# 绘制雷达图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)


#绘制各校总人数占比饼图labels = [str(i)[-2:] for i in sc['学校代码']]sizes = sc['人数'].valuesexplode = [0] * len(sizes)plt.pie(sizes,explode=explode,labels=labels,autopct='%1.1f%%',shadow=False,startangle=150)plt.title("各校总人数占比饼图")plt.axis('equal') #该行代码使饼图长宽相等#分别绘制各校各科人数占比饼图col = m // 3 #最大列数n = (len(school)+col-1) // col #最大行数#划分子图,分成n*col个区域,并设置各个子图的宽、高和绘图分辨率fig, axes = plt.subplots(n, col,figsize=(8, 8), dpi=100)for i, k in enumerate(school, start=0): #遍历每一所学校,绘制各校选课人数饼图labels = kms #(每一块)饼图外侧显示的说明文字sizes = sc.iloc[i].values[2:] #(每一块)的比例,如果sum(x) > 1会使用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("学校"+k+"各科人数占比饼图") #为每个子图设置标题plt.show()
说明:因为本项目内容较多,故写成系列文章分成多次分享,请大家稍安勿躁哦。
需要本文word版或者相关源代码的,可以加入“Python算法之旅”知识星球参与讨论和下载文件,“Python算法之旅”知识星球汇集了数量众多的同好,更多有趣的话题在这里讨论,更多有用的资料在这里分享。
我们专注Python算法,感兴趣就一起来!
相关优秀文章:
斌哥教你自制多功能单词本
普通高中选课数据分析和可视化(1)
评论
