import matplotlib.pyplot as plt
import numpy as np

# 考试名称（X轴标签）
exams = ['期中一', '月考一', '期中二', '月考二', '期末']
# 对应成绩（Y轴数值）
scores = [72, 68, 85, 80, 92]

# 创建图形，设置尺寸（宽10英寸，高6英寸）
plt.figure(figsize=(10, 6))

# 绘制折线图，marker='o' 表示用圆点标记数据点，linewidth=2 设置线宽
plt.plot(exams, scores, marker='o', linestyle='-', linewidth=2, markersize=8, color='b', label='成绩走势')

# 在每个数据点上方标注具体分数
for i, (exam, score) in enumerate(zip(exams, scores)):
    plt.text(i, score + 1, str(score), ha='center', va='bottom', fontsize=10)

# 添加平均线（可选）
avg_score = np.mean(scores)
plt.axhline(y=avg_score, color='r', linestyle='--', linewidth=1, label=f'平均分 ({avg_score:.1f})')

# 设置图表标题和轴标签
plt.title('学生考试成绩走势图', fontsize=16, pad=15)
plt.xlabel('考试', fontsize=12)
plt.ylabel('分数', fontsize=12)

# 设置Y轴范围（留出标注空间）
plt.ylim(min(scores) - 5, max(scores) + 8)

# 显示网格（虚线样式）
plt.grid(True, linestyle=':', alpha=0.7)

# 显示图例
plt.legend()

# 自动调整布局，防止标签被裁剪
plt.tight_layout()

# 显示图形
plt.show()