首页 > 解决方案 > 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()

标签: pythonpython-3.xnumpymatplotlib

解决方案


只需稍微修改您的代码即可将百分比转换为高度变量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()

推荐阅读