以此数据为基础生成一个3科成绩不同成绩段人数的折线图
不确定你说的格式对齐是指什么,还有成绩段的标准。以下代码供参考:
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()