导入自制成绩表,绘制柱形图(三组),×轴刻度标签为姓名,使用三种不同方法为三组柱形分别设置颜色(不要红色和绿色)。要有图例。 在此图上添加一组散点,大圆圈,散点y轴位置1,针对某一科目成绩做如下标记,如果挂科,圆圈填充红色,如果及格,填充绿色
时间: 2024-12-11 14:37:20 浏览: 14
在Python中,我们可以使用matplotlib库来完成这个任务。首先,我们需要导入必要的库并加载成绩数据。这里假设我们有一个包含姓名、科目和成绩的DataFrame。以下是具体的步骤:
1. **导入所需库**:
```python
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns # 可选,用于美化散点图
sns.set_theme(style="whitegrid") # 只有在使用seaborn时才需要这行
```
2. **加载成绩数据**:
```python
df_scores = pd.read_csv('scores.csv') # 替换为你的CSV文件路径
```
3. **绘制柱状图**:
```python
# 确保数据已按科目分组
grouped_scores = df_scores.groupby('姓名')
# 选择三种非红色和绿色的颜色
color_palette = sns.color_palette("husl", n_colors=len(grouped_scores))[:3] # 排除红色和绿色
for name, group in grouped_scores:
plt.bar(name, group['成绩'], color=color_palette.pop(), edgecolor='black')
plt.xlabel('姓名')
plt.ylabel('成绩')
plt.title('各人科目成绩柱状图')
plt.xticks(rotation=45) # 旋转x轴标签以便查看
plt.legend(labels=df_scores['科目'].unique()) # 设置图例
plt.show()
```
4. **添加散点图(针对某科目)**:
假设你想关注“数学”这一科目,并标记及格和不及格的成绩。首先筛选出数学成绩:
```python
math_df = df_scores[df_scores['科目'] == '数学']
math_scores = math_df['成绩']
# 添加散点图
scatter_data = math_df[['姓名', '成绩']]
scatter = scatter_data.plot.scatter(x='姓名', y='成绩', c=math_scores.map(lambda x: 'r' if x < 60 else 'g'), s=100) # 如果不及格用红色,及格用绿色,s表示圆圈大小
# 标记
for i, txt in enumerate(scatter_data.index):
if math_scores[i] < 60:
plt.annotate(str(math_scores[i]), (txt[0], math_scores[i] + 5), color='red', ha='center', va='bottom')
else:
plt.annotate(str(math_scores[i]), (txt[0], math_scores[i] + 5), color='green', ha='center', va='bottom')
plt.show()
```
现在,你已经完成了柱状图和散点图的绘制,并对数学科目的成绩进行了标记。
阅读全文