anaconda:根据自制成绩表绘制饼图图,要求以%形式显示,保留1位小数,任意选择一个成绩从中心抽离0.1,要求为每一个成绩添加labels,并绘制图例 学号%3==1 绘制第一科饼图,==2绘制第二科饼图,==3绘制第三科饼图
时间: 2024-10-19 10:05:17 浏览: 58
在Anaconda环境下,你可以使用`matplotlib`库中的`pie`函数结合条件判断来绘制这种分层饼图。首先,假设你的成绩表已经按照你的需求进行了预处理,包括百分比计算并移除了指定的成绩。
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 假设df是你的成绩DataFrame,列名为'score','subject'表示科目,'percentage'表示百分比
df['percentage'] = df['score'] / df['total_score'] * 100 # 计算百分比
selected_score_to_shift = df.loc[df['subject'].isin(['first_subject'])]['percentage'][0] # 选择需要移除的分数
# 划分数据集
sub_df1 = df[df['subject'] == 'first_subject']
sub_df2 = df[df['subject'] == 'second_subject']
sub_df3 = df[df['subject'] == 'third_subject']
# 创建饼图并移动某个分数
def draw_pie(subject_df, selected_score):
plt.pie(subject_df['percentage'], autopct='%1.1f%%', labels=subject_df.index, startangle=90)
center_circle = plt.Circle((0,0),0.70,fc='white')
fig = plt.gcf()
fig.gca().add_artist(center_circle)
plt.text(0.5, -0.2, selected_score, transform=ax.transAxes, fontsize=10)
plt.title(f"{subject_df['subject']}成绩分布")
plt.legend(labels=['其他成绩'])
for i in range(1, 4): # 根据你的条件判断
if i % 3 == 0:
ax = plt.subplot(3, 1, i)
draw_pie(sub_df1, selected_score_to_shift -1)*0.1) # 移动分数按学科分隔
plt.tight_layout()
plt.show()
```
这会分别绘制第一科、第二科和第三科的饼图,并将指定的分数从中心位置向两侧移动,形成视觉上的效果。
阅读全文