python - matplotlib 和 numpy,问题在 Python 中格式化二维条形图
问题描述
我正在努力做到这一点,所以表格只代表平均获得一次的成绩(嵌套列表中的索引 2),现在,如果我向列表中添加更多条目(例如,100),它会将其变成 2D达到每个等级的条形图。例如,如果许多学生达到“1”级,我该如何做到这一点,他们将被分组到该年级,等等?
import matplotlib.pyplot as plt; plt.rcdefaults()
import numpy as np
import matplotlib.pyplot as plt
master_list = [['Q34345678', "Charles Lob Miester Taylor To", 4, 'OM555'], ['Q54345678', "Tob", 9, 'COM363'],
['Q01245678', "Pob", 10, 'COM712'], ['Q98745678', "Cob", 3, 'COM343'], ['Q64345678', "Fob", 2, 'COM098'],
['Q84245678', "Bob", 1, 'COM712'],['Q34345678', " Taylor", 4, 'OM555'],['Q54345678', "Lauren", 9, 'COM363'],
['Q01245678', "Amy", 10, 'COM712'], ['Q98745678', "Nicola", 3, 'COM343'], ['Q64345678', "Yasmin", 2, 'COM098'],
['Q84245678', "Liv", 1, 'COM712'],]
#names = list(f[1] for f in master_list)
grades = list(f[2] for f in master_list)
y_pos = np.arange(len(master_list))
plt.figure(figsize=(20,10))
plt.bar(y_pos, grades, align='center', alpha=0.6)
#plt.xticks(y_pos,grades)
plt.ylabel('Grade')
plt.xlabel('Percent of students with achieved grade')
plt.title('2021 STUDENT CLASS')
plt.show()
解决方案
只需稍微修改您的代码即可将百分比转换为高度变量plt.bar()
:
names = list(f[1] for f in master_list)
grades = list(f[2] for f in master_list)
y_pos = np.arange(len(master_list))
g = {}
for i in grades:
try:
g[i] += 1
except:
g[i] = 1
h = []
for i in y_pos:
try:
if g[i]:
h.append(g[i])
except:
h.append(0)
plt.figure(figsize=(20,10))
plt.bar(y_pos, h, align='center', alpha=0.6)
#plt.xticks(y_pos,grades)
plt.ylabel('Grade')
plt.xlabel('Percent of students with achieved grade')
plt.title('2021 STUDENT CLASS')
plt.show()