python随机生成, 折线图题

pytnon随机生成50个学生期中考试3科成绩(python,数学,英语),以列表输出,格式对齐;

以此数据为基础生成一个3科成绩不同成绩段人数的折线图

不确定你说的格式对齐是指什么,还有成绩段的标准。以下代码供参考:

img

import matplotlib.pyplot as plt
from pylab import mpl
import random
mpl.rcParams['font.sans-serif']=['SimHei']
grades = ["<60","60-69","70-79","80-89","90-100"]

# 随机生成50个学生的成绩
legend = ["Python","数学","英语"]
py = random.choices(range(101),k=50)
ma = random.choices(range(101),k=50)
en = random.choices(range(101),k=50)
score = [py,ma,en]
# 初始化人数字典
a = ((0,0),(6,0),(7,0),(8,0),(9,0))
ppl = [dict(a),dict(a),dict(a)]
for g in range(3):
    print(f"{legend[g]}的成绩为:")
    print(score[g])
    for i in score[g]:
        if i>=90:
            ppl[g][9] += 1
        elif i>=60:
            ppl[g][i//10] += 1
        else:
            ppl[g][0] += 1
# 生成折线图
for i in range(3):
    plt.plot(grades,ppl[i].values(),label=legend[i])
plt.legend()
plt.xlabel("成绩段")
plt.ylabel("人数")
plt.show()
from faker import Faker
import pandas as pd
import numpy as np
import  matplotlib.pyplot as plt
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['SimHei']

fake = Faker('zh_CN')
d1 = np.array([[fake.name(),fake.ean8()] for _ in range(50)])
d2 = np.random.randint(1, 100, 150).reshape(50, 3)
df1 = pd.DataFrame(d1, columns = ['姓名', '学号'])
df2 = pd.DataFrame(d2, columns = ['python', '数学', '英语'])
df = pd.concat((df1, df2), axis = 1)
print(df)

b = [0, 60, 70, 80, 90, 101]
for i in df.iloc[:, 2:]:
    s = pd.cut(df[i].tolist(),b, right = False)
    cou = pd.value_counts(s, sort = False)
    pho = plt.plot(cou.index.astype(str), cou, label = i)
plt.legend()
plt.xlabel('成绩段')
plt.ylabel('数量')
plt.show()

img

img