日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Python matplotlib讀取excel數(shù)據(jù)并用for循環(huán)畫多個(gè)子圖subplot操作

瀏覽:230日期:2022-07-17 15:01:25

讀取excel數(shù)據(jù)需要用到xlrd模塊,在命令行運(yùn)行下面命令進(jìn)行安裝

pip install xlrd

表格內(nèi)容大致如下,有若干sheet,每個(gè)sheet記錄了同一所學(xué)校的所有學(xué)生成績,分為語文、數(shù)學(xué)、英語、綜合、總分

考號(hào) 姓名 班級(jí) 學(xué)校 語文 數(shù)學(xué) 英語 綜合 總分 ... ... ... ... 136 136 100 57 429 ... ... ... ... 128 106 70 54 358 ... ... ... ... 110.5 62 92 44 308.5

畫多張子圖需要用到subplot函數(shù)

subplot(nrows, ncols, index, **kwargs)

想要在一張畫布上按如下格式畫多張子圖

語文 --- 數(shù)學(xué)

英語 --- 綜合

----- 總分 ----

需要用的subplot參數(shù)分別為

subplot(321) --- subplot(322)

subplot(323) --- subplot(324)

subplot(313)

#!/usr/bin/env python# -*- coding:utf-8 -*-from xlrd import open_workbook as owbimport matplotlib.pyplot as plt#import matplotlib.colors as colors#from matplotlib.ticker import MultipleLocator, FormatStrFormatter, FuncFormatterimport numpy as np districts=[] # 存儲(chǔ)各校名稱--對(duì)應(yīng)于excel表格的sheet名data_index = 0new_colors = [’#1f77b4’, ’#ff7f0e’, ’#2ca02c’, ’#d62728’, ’#9467bd’, ’#8c564b’, ’#e377c2’, ’#7f7f7f’, ’#bcbd22’, ’#17becf’]wb = owb(’raw_data.xlsx’) # 數(shù)據(jù)文件active_districts = [’二小’,’一小’,’四小’] ## 填寫需要畫哪些學(xué)校的,名字需要與表格內(nèi)一致avg_yuwen = []avg_shuxue = []avg_yingyu = []avg_zonghe = []avg_total = []’按頁數(shù)依次讀取表格數(shù)據(jù)作為Y軸參數(shù)’for s in wb.sheets(): #以下兩行用于控制是否全部繪圖,還是只繪選擇的區(qū) #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 #讀取各科成績并計(jì)算平均分 yuwen = yuwen + (s.cell(row, 4).value - yuwen)/total_student # 語文 shuxue = shuxue + (s.cell(row, 5).value - shuxue) / total_student # 數(shù)學(xué) yingyu = yingyu + (s.cell(row, 6).value - yingyu) / total_student # 英語 zonghe = zonghe + (s.cell(row, 7).value - zonghe) / total_student # 綜合 zongfen = zongfen + (s.cell(row, 8).value - zongfen) / total_student # 總分 avg_yuwen.append(yuwen) avg_shuxue.append(shuxue) avg_yingyu.append(yingyu) avg_zonghe.append(zonghe) avg_total.append(zongfen) data_index += 1 print(’開始畫圖...’)plt.rcParams[’font.sans-serif’]=[’SimHei’] # 中文支持plt.rcParams[’axes.unicode_minus’]=False # 中文支持figsize = 11,14fig = plt.figure(figsize=figsize)fig.suptitle(’各校各科成績平均分統(tǒng)計(jì)’,fontsize=18)my_x=np.arange(len(districts))width=0.5 ax1 = plt.subplot(321)#total_width=width*(len(districts))b = ax1.bar(my_x , avg_yuwen, width, tick_label=districts, align=’center’, color=new_colors)for i in range(0,len(avg_yuwen)): ax1.text(my_x[i], avg_yuwen[i], ’%.2f’ % (avg_yuwen[i]), ha=’center’, va=’bottom’,fontsize=10)ax1.set_title(u’語文’)ax1.set_ylabel(u'平均分')ax1.set_ylim(60, 130) ax2 = plt.subplot(322)ax2.bar(my_x, avg_shuxue, width, tick_label=districts, align=’center’, color=new_colors)for i in range(0, len(avg_shuxue)): ax2.text(my_x[i], avg_shuxue[i], ’%.2f’ %(avg_shuxue[i]), ha=’center’, va=’bottom’, fontsize=10)ax2.set_title(u’數(shù)學(xué)’)ax2.set_ylabel(u’平均分’)ax2.set_ylim(50,120) ax3 = plt.subplot(323)b = ax3.bar(my_x , avg_yingyu, width, tick_label=districts, align=’center’, color=new_colors)for i in range(0,len(avg_yingyu)): ax3.text(my_x[i], avg_yingyu[i], ’%.2f’ % (avg_yingyu[i]), ha=’center’, va=’bottom’,fontsize=10)ax3.set_title(u’英語’)ax3.set_ylabel(u'平均分')ax3.set_ylim(30, 100) ax4 = plt.subplot(324)b = ax4.bar(my_x , avg_zonghe, width, tick_label=districts, align=’center’, color=new_colors)for i in range(0,len(avg_zonghe)): ax4.text(my_x[i], avg_zonghe[i], ’%.2f’ % (avg_zonghe[i]), ha=’center’, va=’bottom’,fontsize=10)ax4.set_title(u’綜合’)ax4.set_ylabel(u'平均分')ax4.set_ylim(0, 60) ax5 = plt.subplot(313)total_width=width*(len(districts))b = ax5.bar(my_x , avg_total, width, tick_label=districts, align=’center’, color=new_colors)for i in range(0,len(avg_total)): ax5.text(my_x[i], avg_total[i], ’%.2f’ % (avg_total[i]), ha=’center’, va=’bottom’,fontsize=10)ax5.set_title(u’總分’)ax5.set_ylabel(u'平均分')ax5.set_ylim(250, 400) plt.savefig(’avg.png’)plt.show()

Python matplotlib讀取excel數(shù)據(jù)并用for循環(huán)畫多個(gè)子圖subplot操作

這樣雖然能畫出來,但是需要手動(dòng)寫每個(gè)subplot的代碼,代碼重復(fù)量太大,能不能用for循環(huán)的方式呢?

繼續(xù)嘗試,

先整理出for循環(huán)需要的不同參數(shù)

avg_scores = [] # 存儲(chǔ)各科成績,2維listsubjects = [’語文’,’數(shù)學(xué)’,’英語’,’綜合’,’總分’] #每個(gè)子圖的titleplot_pos = [321,322,323,324,313] # 每個(gè)子圖的位置y_lims = [(60,130), (50,120), (30,100), (0,60), (200,400)] # 每個(gè)子圖的ylim參數(shù)

數(shù)據(jù)讀取的修改比較簡單,但是到畫圖時(shí),如果還用 ax = plt.subplots(plot_pos[pos])方法的話,會(huì)報(bào)錯(cuò)

Traceback (most recent call last): File '...xxx.py', line 66, in <module> b = ax.bar(my_x , y_data, width, tick_label=districts, align=’center’, color=new_colors) # 畫柱狀圖AttributeError: ’tuple’ object has no attribute ’bar’

搜索一番,沒找到合適的答案,想到可以換fig.add_subplot(plot_pos[pos]) 試一試,結(jié)果成功了,整體代碼如下

#!/usr/bin/env python# -*- coding:utf-8 -*-from xlrd import open_workbook as owbimport matplotlib.pyplot as plt#import matplotlib.colors as colors#from matplotlib.ticker import MultipleLocator, FormatStrFormatter, FuncFormatterimport numpy as np districts=[] # 存儲(chǔ)各校名稱--對(duì)應(yīng)于excel表格的sheet名total_stu=[] # 存儲(chǔ)各區(qū)學(xué)生總數(shù)data_index = 0new_colors = [’#1f77b4’, ’#ff7f0e’, ’#2ca02c’, ’#d62728’, ’#9467bd’, ’#8c564b’, ’#e377c2’, ’#7f7f7f’, ’#bcbd22’, ’#17becf’]wb = owb(’raw_data.xlsx’) # 數(shù)據(jù)文件active_districts = [’BY’,’二小’,’一小’,’WR’,’四小’] ## 填寫需要畫哪些學(xué)校的,名字需要與表格內(nèi)一致avg_scores = [] # 存儲(chǔ)各科成績,2維listsubjects = [’語文’,’數(shù)學(xué)’,’英語’,’綜合’,’總分’] #每個(gè)子圖的titleplot_pos = [321,322,323,324,313] # 每個(gè)子圖的位置y_lims = [(60,130), (50,120), (30,100), (0,60), (200,400)] # 每個(gè)子圖的ylim參數(shù) ’按頁數(shù)依次讀取表格數(shù)據(jù)作為Y軸參數(shù)’for s in wb.sheets(): #以下兩行用于控制是否全部繪圖,還是只繪選擇的區(qū) #if s.name not in active_districts: # continue print(’Sheet: ’, s.name) districts.append(s.name) avg_scores.append([]) yuwen = 0 shuxue = 0 yingyu = 0 zonghe = 0 zongfen = 0 total_student = 0 for row in range(1,s.nrows): total_student += 1 #tmp = s.cell(row,4).value yuwen = yuwen + (s.cell(row, 4).value - yuwen)/total_student # 語文 shuxue = shuxue + (s.cell(row, 5).value - shuxue) / total_student # 數(shù)學(xué) yingyu = yingyu + (s.cell(row, 6).value - yingyu) / total_student # 英語 zonghe = zonghe + (s.cell(row, 7).value - zonghe) / total_student # 綜合 zongfen = zongfen + (s.cell(row, 8).value - zongfen) / total_student # 總分 avg_scores[data_index].append(yuwen) avg_scores[data_index].append(shuxue) avg_scores[data_index].append(yingyu) avg_scores[data_index].append(zonghe) avg_scores[data_index].append(zongfen) data_index += 1 print(’開始畫圖...’)plt.rcParams[’font.sans-serif’]=[’SimHei’]plt.rcParams[’axes.unicode_minus’]=Falsefigsize = 11,14fig = plt.figure(figsize=figsize)fig.suptitle(’各校各科成績平均分統(tǒng)計(jì)’,fontsize=18)my_x=np.arange(len(districts))width=0.5 print(avg_scores)for pos in np.arange(len(plot_pos)): #ax = plt.subplots(plot_pos[pos]) ax = fig.add_subplot(plot_pos[pos]) # 如果用ax = plt.subplots會(huì)報(bào)錯(cuò)’tuple’ object has no attribute ’bar’ y_data = [x[pos] for x in avg_scores] # 按列取數(shù)據(jù) print(y_data) b = ax.bar(my_x , y_data, width, tick_label=districts, align=’center’, color=new_colors) # 畫柱狀圖 for i in np.arange(len(y_data)): ax.text(my_x[i], y_data[i], ’%.2f’ % (y_data[i]), ha=’center’, va=’bottom’,fontsize=10) # 添加文字 ax.set_title(subjects[pos]) ax.set_ylabel(u'平均分') ax.set_ylim(y_lims[pos]) plt.savefig(’jh_avg_auto.png’)plt.show()

和之前的結(jié)果一樣,能找到唯一一處細(xì)微差別嘛

Python matplotlib讀取excel數(shù)據(jù)并用for循環(huán)畫多個(gè)子圖subplot操作

以上這篇Python matplotlib讀取excel數(shù)據(jù)并用for循環(huán)畫多個(gè)子圖subplot操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: python
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品99精品一区二区三区∴ | 亚洲夜间福利| 精品少妇一区| 日产精品一区二区| 麻豆国产欧美日韩综合精品二区| 久久国产麻豆精品| 老司机免费视频一区二区| 高清av一区| 久久九九99| 性色av一区二区怡红| 蜜臀91精品一区二区三区| 巨乳诱惑日韩免费av| 日产欧产美韩系列久久99| 无码日韩精品一区二区免费| 欧美综合精品| 精品一区二区三区视频在线播放 | 国产探花在线精品一区二区| 国产乱码精品一区二区亚洲| 欧美国产不卡| 成人欧美一区二区三区的电影| 蜜桃一区二区三区| 综合色就爱涩涩涩综合婷婷| 久久国产免费看| 久久只有精品| 美女网站视频一区| 丝袜脚交一区二区| 国产精品传媒麻豆hd| 激情国产在线| 国产模特精品视频久久久久| 日本欧美在线| 亚洲国产欧美日本视频| 在线视频亚洲| 国产乱人伦丫前精品视频| 国产精品成人**免费视频| 日韩一区欧美| 亚洲精选av| 视频在线不卡免费观看| 国产精品日韩久久久| 国产精品色婷婷在线观看| 日韩欧美三级| 免费高清在线一区| 精品免费视频| 麻豆9191精品国产| 久久精品一区| 亚洲一区二区毛片| 你懂的国产精品| 不卡中文字幕| 国产精品久久亚洲不卡| 九色porny丨国产首页在线| 三级欧美在线一区| 精品久久视频| 中文一区二区| 久久久久97| 亚洲一区二区成人| 国产精品久久久久久久免费观看| 久久av一区| 电影91久久久| 婷婷精品久久久久久久久久不卡| av日韩中文| 日韩成人午夜精品| 欧美日韩黑人| 激情中国色综合| 日韩免费精品| 欧美日韩国产高清电影| 国产黄色一区| 亚洲香蕉久久| 亚洲国产专区| 国产一区丝袜| 日本视频一区二区| 99视频一区| 成人国产精品| 国产日韩在线观看视频| 蜜乳av另类精品一区二区| 欧美羞羞视频| 久久av超碰| 亚洲精品动态| 99在线观看免费视频精品观看| 成人精品国产亚洲| 日韩av中文字幕一区二区三区| 成人av二区| 亚洲日本网址| 国内不卡的一区二区三区中文字幕| 蜜臀久久久久久久| 在线视频观看日韩| 捆绑调教日本一区二区三区| 国产精品巨作av| 日韩激情一区二区| 日韩一区欧美二区| 女人av一区| 日韩不卡在线| 高清av不卡| 精品一区二区三区四区五区| 国产一卡不卡| 亚洲精品三级| 亚洲午夜在线| 99热国内精品| 日韩av首页| 国产亚洲一区二区手机在线观看| 国产一区福利| 精品国产午夜肉伦伦影院 | 亚洲毛片视频| 久久亚洲电影| 日韩中文欧美在线| 久久国产精品亚洲77777| 在线精品小视频| 尤物tv在线精品| 三级小说欧洲区亚洲区| 精品免费在线| 欧美激情福利| 久久天堂影院| 成人在线视频中文字幕| 国内在线观看一区二区三区| 久久字幕精品一区| 欧美激情aⅴ一区二区三区 | 国产91精品对白在线播放| a天堂资源在线| 日韩久久精品网| 日韩电影二区| 久久青草久久| 激情偷拍久久| 99久久激情| 日韩亚洲精品在线| 日韩视频中文| 亚洲综合五月| 97se亚洲| 鲁大师精品99久久久| 精品亚洲自拍| www.九色在线| 久久中文字幕二区| 在线精品小视频| 六月天综合网| 日韩成人av影视| 免费看久久久| 日韩在线观看不卡| 亚洲黄色影院| 免费在线看一区| 日本少妇精品亚洲第一区| 国产精品久久久久久久久久久久久久久 | 伊人久久亚洲影院| 一区二区高清| 国产无遮挡裸体免费久久| 国产精品一区二区三区av| 精品九九在线| 婷婷成人综合| 综合国产视频| 国产精品mv在线观看| 国产+成+人+亚洲欧洲在线| 久久男人av资源站| 九一精品国产| 亚洲深深色噜噜狠狠爱网站 | 蜜桃91丨九色丨蝌蚪91桃色| 欧美亚洲三级| 97国产精品| 欧美精品黄色| 欧美私人啪啪vps| 高清在线一区| 一区三区视频| 日韩成人午夜精品| 国产福利91精品一区二区| 欧美特黄一级大片| 中文字幕乱码亚洲无线精品一区| 国产精品v亚洲精品v日韩精品| 亚洲一级少妇| 亚洲免费观看高清完整版在线观| 欧美激情精品| 在线 亚洲欧美在线综合一区| 天堂va在线高清一区| 国产在线一区不卡| 亚洲男女自偷自拍| 免费亚洲婷婷| 亚洲综合精品| 国产欧美亚洲精品a| 亚洲美女久久精品| 中文在线日韩| 久久毛片亚洲| 亚洲午夜免费| 美女视频黄 久久| 91久久中文| 久久免费影院| 在线日韩成人| 亚洲综合在线电影| 91午夜精品| 99久久久久国产精品| 欧美日本一区| 欧美特黄视频| 精品一区二区三区的国产在线观看| 国产二区精品| 欧美激情视频一区二区三区免费| 天堂资源在线亚洲| 国产精品久久久久久久久久妞妞 | 日韩不卡在线观看日韩不卡视频| 日韩大片在线| 国产精品一区二区av日韩在线| 欧洲激情综合| 日产精品一区二区| 欧美在线精品一区| 欧美另类专区| 日韩av二区| 国产探花在线精品| 国产精品av久久久久久麻豆网|