在Python中,可以使用pandas和matplotlib结合来根据自制的成绩表绘制堆积柱状图,其中x轴表示学号,每根柱子代表一个学生三科的成绩。以下是实现步骤:
首先,假定你的成绩数据存储在一个名为df的pandas DataFrame中,列名分别为'StudentID', 'Subject1', 'Subject2', 'Subject3'。
```python
import pandas as pd
import matplotlib.pyplot as plt
# 假设df是你保存成绩的数据,结构类似这样:
# df = pd.DataFrame({
# 'StudentID': ['S001', 'S002', 'S003', ...],
# 'Subject1': [90, 85, 95, ...],
# 'Subject2': [88, 92, 87, ...],
# 'Subject3': [92, 86, 90, ...]
# })
# 绘制堆积柱状图
plt.figure(figsize=(10, 6)) # 设置绘图尺寸
# 定义颜色和堆积顺序
colors = ['#FFC0CB', '#ADD8E6', '#DDA0DD']
subjects = ['Subject1', 'Subject2', 'Subject3']
for i, subject in enumerate(subjects):
# 分别绘制每门学科的成绩
ax = df.plot(kind='bar', y=subject, stacked=True, color=colors[i], label=subject,
position=i * 0.3, rot=0) # 设置每个科目在x轴上的偏移量
# 将x轴的tick labels设置为学号
ax.set_xticklabels(df['StudentID'], rotation=45, ha='right', fontsize=10)
# 添加标题和图例
plt.title('Students\' Scores by Subject')
plt.xlabel('Student ID')
plt.ylabel('Score')
plt.legend(title="Subjects", loc='upper right')
plt.tight_layout() # 优化图距
plt.show()
```