用python写代码,5.利用数据2-5,画出两班的成绩对比条形图和环形图,画出雷达图,看看考试成绩的分布是否相似。2-5是 甲班和乙班分别为优 3优 6, 良 6 良15 ,中 18 中9 ,及格 9 及格8 ,不及格 4 不及格2
时间: 2024-06-06 10:06:43 浏览: 22
# 导入需要的库
import matplotlib.pyplot as plt
import numpy as np
# 数据
data1 = {'优': 3, '良': 6, '中': 18, '及格': 9, '不及格': 4}
data2 = {'优': 6, '良': 15, '中': 9, '及格': 8, '不及格': 2}
# 条形图
x = np.arange(len(data1))
width = 0.35
fig, ax = plt.subplots()
rects1 = ax.bar(x - width/2, list(data1.values()), width, label='甲班')
rects2 = ax.bar(x + width/2, list(data2.values()), width, label='乙班')
ax.set_xticks(x)
ax.set_xticklabels(list(data1.keys()))
ax.legend()
plt.show()
# 环形图
fig, ax = plt.subplots()
wedges1, texts1, autotexts1 = ax.pie(list(data1.values()), labels=list(data1.keys()), autopct='%1.1f%%')
wedges2, texts2, autotexts2 = ax.pie(list(data2.values()), labels=list(data2.keys()), autopct='%1.1f%%', radius=0.75)
plt.show()
# 雷达图
categories = list(data1.keys())
N = len(categories)
values1 = list(data1.values())
values2 = list(data2.values())
angles = np.linspace(0, 2*np.pi, N, endpoint=False)
values1 = np.concatenate((values1, [values1[0]]))
values2 = np.concatenate((values2, [values2[0]]))
angles = np.concatenate((angles, [angles[0]]))
fig, ax = plt.subplots(subplot_kw=dict(polar=True))
ax.plot(angles, values1, 'o-', linewidth=2, label='甲班')
ax.fill(angles, values1, alpha=0.25)
ax.plot(angles, values2, 'o-', linewidth=2, label='乙班')
ax.fill(angles, values2, alpha=0.25)
ax.set_thetagrids(angles * 180/np.pi, categories)
ax.set_title('成绩分布雷达图')
ax.legend()
plt.show()