|
|
|
@ -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()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|