根据自制成绩表绘制饼图图,要求以%形式显示,保留1位小数,任意选择一个成绩从中心抽离0.1,要求为每一个成绩添加labels,并绘制图例 学号%3==1 绘制第一科饼图,==2绘制第二科饼图,==3绘制第三科饼图
时间: 2024-11-05 10:32:31 浏览: 37
Windows程序设计测试1-根据消费情况绘制饼图
在Python中,你可以使用matplotlib库来实现这个需求。首先,确保你已经安装了`matplotlib`以及`pandas`,如果还没有可以使用以下命令安装:
```bash
pip install matplotlib pandas
```
然后,假设你有一个包含学生成绩的数据框,例如:
```python
import pandas as pd
data = {
'学号': [1, 2, 3, 4, 5],
'第一科': [85, 92, 78, 90, 88],
'第二科': [90, 86, 95, 88, 93],
'第三科': [93, 89, 80, 92, 95]
}
df = pd.DataFrame(data)
```
接下来,我们可以按照你的要求创建饼图:
```python
import matplotlib.pyplot as plt
# 设置百分比并保留一位小数
def percentage(series):
return (series / series.sum()) * 100.0
for col in ['第一科', '第二科', '第三科']:
# 确定需要抽离中心的百分比
offset_percentage = 0.1 if col == df.columns[-1] else 0.0
# 计算并绘制饼图
sub_df = df[df['学号'] % 3 == col_name_to_int(col)]
labels = sub_df.index.tolist()
values = percentage(sub_df[col])
fig, ax = plt.subplots(figsize=(10, 10))
ax.pie(values, labels=labels, autopct='%1.1f%%', startangle=140, pctdistance=offset_percentage)
# 添加标题和图例
title = f'{col}科成绩分布'
ax.set_title(title)
ax.legend(title='科目')
# 显示图例在右下角
legend_handles, _ = ax.get_legend_handles_labels()
fig.legend(handles=legend_handles, loc='upper right')
# 显示图形
plt.show()
# 函数用于将列名转换成整数以便判断位置
def col_name_to_int(name):
return {'第一科': 1, '第二科': 2, '第三科': 3}[name]
```
这段代码会分别绘制三个学科的成绩饼图,每个学科的图表上都会标注对应的学号,并且最后一个科目的饼图会把数值向外围抽离0.1%作为视觉效果。
阅读全文