Python matplotlib读取读取excel数据并用数据并用for循环画多个子图循环画多个子图
subplot操作操作
读取excel数据需要用到xlrd模块,在命令行运行下面命令进行安装
pip install xlrd
表格内容大致如下,有若干sheet,每个sheet记录了同一所学校的所有学生成绩,分为语文、数学、英语、综合、总分
考号 姓名 班级 学校 语文 数学 英语 综合 总分
… … … … 136 136 100 57 429
… … … … 128 106 70 54 358
… … … … 110.5 62 92 44 308.5
画多张子图需要用到subplot函数
subplot(nrows, ncols, index, **kwargs)
想要在一张画布上按如下格式画多张子图
语文 — 数学
英语 — 综合
—– 总分总分 —-
需要用的subplot参数分别为
subplot(321) — subplot(322)
subplot(323) — subplot(324)
subplot(313)
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from xlrd import open_workbook as owb
import matplotlib.pyplot as plt
#import matplotlib.colors as colors
#from matplotlib.ticker import MultipleLocator, FormatStrFormatter, FuncFormatter
import numpy as np
districts=[] # 存储各校名称--对应于excel表格的sheet名
data_index = 0
new_colors = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728',
'#9467bd', '#8c564b', '#e377c2', '#7f7f7f',
'#bcbd22', '#17becf'] wb = owb('raw_data.xlsx') # 数据文件
active_districts = ['二小','一小','四小'] ## 填写需要画哪些学校的,名字需要与表格内一致
avg_yuwen = [] avg_shuxue = [] avg_yingyu = [] avg_zonghe = [] avg_total = [] '按页数依次读取表格数据作为Y轴参数'
for s in wb.sheets():
#以下两行用于控制是否全部绘图,还是只绘选择的区
#if s.name not in active_districts:
# continue
print('Sheet: ', s.name)
districts.append(s.name)
avg_score = 0
yuwen = 0
shuxue = 0
yingyu = 0
zonghe = 0
zongfen = 0
total_student = 0
for row in range(1,s.nrows):
total_student += 1
#读取各科成绩并计算平均分
yuwen = yuwen + (s.cell(row, 4).value - yuwen)/total_student # 语文
shuxue = shuxue + (s.cell(row, 5).value - shuxue) / total_student # 数学
yingyu = yingyu + (s.cell(row, 6).value - yingyu) / total_student # 英语
评论0