python文件score.xlsx中存放了学生的各个科目的考试成绩(如下图),编程实现:输入任意一个学号,将该学号对应的成绩,通过雷达图显示。
时间: 2024-05-13 08:21:09 浏览: 296
好的,根据您的要求,我可以帮您实现这个功能。以下是代码:
``` python
import pandas as pd
import matplotlib.pyplot as plt
from math import pi
# 读取Excel文件
df = pd.read_excel('score.xlsx', index_col=0)
# 定义雷达图的参数
categories = df.columns.tolist() # 获取分类
N = len(categories) # 获取分类数
# 将最大值和最小值加到DataFrame中,以防止图形顶点被遮挡
df = pd.concat([df, df.max().to_frame().T, df.min().to_frame().T], axis=0)
# 定义函数用于绘制雷达图
def plot_radar(row):
values = row.drop('姓名').tolist() # 获取数据
values += values[:1] # 闭合数据
angles = [n / float(N) * 2 * pi for n in range(N)]
angles += angles[:1] # 闭合角度
ax = plt.subplot(111, polar=True)
ax.plot(angles, values, 'o-', linewidth=2)
ax.fill(angles, values, alpha=0.25)
ax.set_thetagrids(angles[:-1], categories)
ax.set_ylim(df.min().min() - 10, df.max().max() + 10)
title = row['姓名'] + ' 的成绩'
ax.set_title(title, fontsize=14)
# 获取用户输入的学号
while True:
sid = input("请输入学号:")
if sid in df.index:
break
else:
print("该学号不存在,请重新输入")
# 根据学号显示对应学生的雷达图
print("该学生的成绩如下:")
plot_radar(df.loc[sid])
plt.show()
```
接下来,请问您有什么其他问题吗?
阅读全文