Anaconda:1.根据自制成绩表绘制饼图图,要求以%形式显示,保留1位小数,任意选择一个成绩从中心抽离0.1,要求为每一个成绩添加labels,并绘制图例 学号%3==1 绘制第一科饼图,==2绘制第二科饼图,==3绘制第三科饼图
时间: 2024-10-19 09:05:14 浏览: 39
Anaconda是一种流行的开源数据科学平台,它包含了Python的数据分析库NumPy、Pandas和可视化库Matplotlib等。要根据自制的成绩表绘制饼图,你可以使用pandas来处理数据,matplotlib进行绘图。下面是一个简单的步骤说明:
1. **数据准备**:
首先,你需要有一个包含学号、科目和成绩的DataFrame。例如,假设你的数据集叫做`scores_df`,并且已经按照学号排序。
```python
import pandas as pd
# 假设df结构如下
# 学号 科目 成绩
# 0 1 第一科 85.67
# 1 2 第二科 90.23
# 2 3 第三科 78.12
```
2. **计算百分比并格式化**:
计算每个科目的百分比,然后四舍五入到一位小数。
```python
percentages = scores_df.groupby('科目')['成绩'].transform(lambda x: (x / x.sum()) * 100).round(1)
```
3. **抽取中心成绩和设置位置**:
选择一个成绩并将其移除0.1的位置偏移,这可以使用`apply`函数结合lambda表达式实现。
```python
offset_index = scores_df['成绩'].idxmax() # 获取最大值索引
offset_value = scores_df.loc[offset_index, '成绩'] - 0.1
```
4. **绘制饼图**:
使用`matplotlib`的`pie`函数创建饼图。为了按学号区分科目,你可以将`DataFrame`转换为字典,然后分组绘制。
```python
import matplotlib.pyplot as plt
def draw_pie(df, index, offset_value):
data = df.set_index('学号').T.to_dict()
for i in range(1, 4): # 1, 2, 3对应第一、二、三科
if i == index:
labels = data[f'第{i}科']
labels[labels.index] += f' ({offset_value:.1f}%)' # 添加调整后的值
plt.pie(data[f'第{i}科'], labels=labels.values(), autopct='%1.1f%%', startangle=90, explode=[0] + [0.1] * (len(labels) - 1))
else:
plt.pie(data[f'第{i}科'], labels=data[f'第{i}科'].index, autopct='%1.1f%%', startangle=90)
draw_pie(scores_df, 1, offset_value)
plt.legend(title='科目')
plt.title('各科目成绩分布')
plt.show()
```
阅读全文