如何让柱状图展示含零值变量?Python学生成绩可视化问题
解决方法:让柱状图显示全部A-F成绩等级
你的代码里用collections.Counter(grade)统计等级频率时,只会保留有学生获得的等级。要显示全部A-F等级,需要先定义完整的等级列表,再为每个等级补全计数(无学生的等级计数设为0)。
修改步骤
- 在
summarize_test_scores函数中,定义完整的成绩等级列表:
all_grades = ['A', 'B', 'C', 'D', 'F']
- 替换原有的频率统计逻辑,确保每个等级都有对应的计数:
grades_freq = collections.Counter(grade) # 遍历完整等级列表,获取每个等级的计数,不存在则返回0 grade_counts = [grades_freq.get(g, 0) for g in all_grades]
- 绘制柱状图时,使用补全后的计数和完整等级列表:
axes = sns.barplot(x=grade_counts, y=all_grades, palette='bright')
修改后的完整代码
%matplotlib inline import matplotlib.pyplot as plt import numpy as np import random import seaborn as sns import collections def input_test_scores(): #input for number of students studentnumber=int(input('Enter number of students')) #input for number of tests per student numberoftests=int(input('enter number of tests per student')) #empty list to store scores score=[] for i in range(studentnumber): #empty list for each students name and scores studentlist=[] for j in range(numberoftests): #input for test score print("Enter score for test ", j+1, ":") #add students score to their list studentlist.append(int(input())) #add student list to score list to create a 2d list score.append(studentlist) return score def summarize_test_scores(score): A=0 B=0 C=0 D=0 F=0 gradelist=[A,B,C,D,F] mean=[] for data in score: m=sum(data)/len(data) mean.append(m) grade=[] for x in mean: if x >=90: grade.append('A') A+=1 elif x >=80: B+=1 grade.append('B') elif x >=70: C+=1 grade.append('C') elif x >=60: D+=1 grade.append('D') else: F+=1 grade.append('F') print("MEAN GRADE") for i in range(len(score)): print(f'{mean[i]:.2f} {grade[i]} ') title = f'Student Grades' # 定义完整的成绩等级列表 all_grades = ['A', 'B', 'C', 'D', 'F'] grades_freq = collections.Counter(grade) # 补全每个等级的计数,无学生的等级设为0 grade_counts = [grades_freq.get(g, 0) for g in all_grades] sns.set_style('whitegrid') axes = sns.barplot(x=grade_counts, y=all_grades, palette='bright') axes.set(xlabel='Students', ylabel='Grades') axes.set_title(title) score=input_test_scores () summarize_test_scores(score)
修改后,无论是否有学生获得某个等级,柱状图都会完整显示A-F所有字母,对应计数为0的等级会显示高度为0的柱子。
内容的提问来源于stack exchange,提问作者gia blum
相关产品推荐
相关产品推荐

