You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

98 lines
3.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#数据可视化
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()