From bb802d882c93705bce375f52037fac877d42cfac Mon Sep 17 00:00:00 2001 From: hnu202410040228 Date: Fri, 23 May 2025 18:26:46 +0800 Subject: [PATCH] ADD file via upload --- 分数可视化.py | 97 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 分数可视化.py diff --git a/分数可视化.py b/分数可视化.py new file mode 100644 index 0000000..4bf2bb0 --- /dev/null +++ b/分数可视化.py @@ -0,0 +1,97 @@ +#数据可视化 +import matplotlib.pyplot as plt +import matplotlib +matplotlib.rcParams['font.family']='simHei' #显示汉字 +plt.rcParams['axes.unicode_minus'] = False #显示负号 +############################################################ +#1. 折线图可视化 +try: + x=int(input('请输入考试的次数:') ) + y=list(map(float, input('请输入学生每次考试成绩(用空格分隔): ').split())) +except: + print("输入格式错误!请确保输入数字") + exit() +if len(y)!=x: + print(f"错误:考试次数应为{x}次,但输入了{len(y)}个成绩") + exit() +x = list(range(1, x+1)) +plt.figure('fig1') # 命名 +plt.title('学生成绩的变化趋势') +plt.plot(x,y,color='r',label='学生成绩') +plt.legend() +plt.xlabel('考试次数') +plt.ylabel('学生成绩') +plt.savefig('成绩趋势.png') +plt.show() +############################################################### +#2. 两个人之间的成绩比较 +try: + x=int(input('请输入考试的次数:') ) + y1=list(map(float, input('请输入第一个学生每次考试成绩(用空格分隔): ').split())) + y2=list(map(float, input('请输入第二个学生每次考试成绩(用空格分隔): ').split())) +except ValueError: + print("输入格式错误!请确保输入数字") + exit() +if len(y1)!=x or len(y2)!=x: + print(f"错误:考试次数应为{x}次,但输入了错误个数的成绩") + exit() +x = list(range(1, x+1)) +plt.figure('fig2') # 命名第二个图 +plt.title('两者的成绩比较') +plt.plot(x,y1,'r-v',label='第一个人的成绩') +plt.plot(x,y2,'b--v',label='第二个人的成绩') +plt.legend() +plt.xlabel('考试次数') +plt.ylabel('学生成绩') # 创建成绩比较表格 +plt.savefig('成绩比较.png') +plt.show() +################################################################## +#3. 班级中的整体情况(饼状图) +try: + count_grades=input('请输入考试各个分段的人数:').split() # 每个分段用空格隔开 + ladder=input('输入各个分段标签:').split() # 例为优秀,良好...... + explode = list(map(float, input('请输入突出程度(0-1,用空格分隔): ').split())) # 输入每个分段的突出程度 + if len(count_grades) != len(ladder) or len(ladder) != len(explode): + print(f"错误:输入数量不匹配(人数:{len(count_grades)} 标签:{len(ladder)} 突出:{len(explode)})") + exit() + if sum(count_grades) == 0: + print("错误:总人数不能为0") + exit() +except ValueError : + print("输入格式错误") + exit() +plt.figure('fig3') +plt.title('班级成绩的整体情况') +plt.pie(ladder,count_grades,explode,labels=ladder,autopct='%1.1f%%') +plt.legend() # 创建分数饼状图 +plt.savefig('分数状况.png') +plt.show() +#4. 各个阶段分数的人数显示(柱状图) +try: + count_grades=input('请输入考试各个分段的人数:').split() # 每个分段用空格隔开 + ladder=input('输入各个分段标签:').split() + if len(count_grades) != len(ladder): + print(f"错误:输入数量不匹配(人数:{len(count_grades)} 标签:{len(ladder)} )") + exit() + if sum(count_grades) == 0: + print("错误:总人数不能为0") + exit() +except ValueError : + print("输入格式错误") + exit() +plt.figure('fig4') +plt.bar(ladder,count_grades,width=0.5,bottom=0) +x.label('分数阶段') +y.label('分数阶段的人数') +for x,y in zip(ladder,count_grades) : + plt.text(ladder,count_grades,count_grades,ha='center',va='bottom') +plt.savefig('阶段分数显示.png') # 创建分数柱状图 +plt.show() + + + + + + + +