matplotlib和numpy,在Python中设置二维条形图的格式

2024-06-08 13:20:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图使表格只表示平均达到一次的成绩(嵌套列表中的索引2),现在,如果我向列表中添加更多条目(例如,100),它会将每个成绩转化为二维条形图。例如,如果一些学生达到了“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()


Tags: posimportmaster列表matplotlibasnpplt
2条回答

只需稍微修改代码,将百分比放入高度变量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()

如果我理解正确的话,我想下面的内容会满足你的需要

import matplotlib.pyplot as plt
import numpy as np

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)

plt.figure(figsize=(20,10))
plt.hist(grades, bins=np.arange(min(grades), max(grades)+2), rwidth=0.8, align='left')
plt.xticks(range(11)) # grades from 0 through 10
bincount = np.bincount(grades) # get the distribution in integer bins...
plt.yticks(range(max(np.bincount(grades) + 1))) # ...in order to make neat ticks
plt.ylabel('Frequency')
plt.xlabel('Grade')
plt.title('2021 STUDENT CLASS')

plt.show()

相关问题 更多 >