Python实现DataFrame各年龄组性别占比饼图绘制方法
绘制各年龄组性别占比饼图
你已经算出了各年龄组的性别占比,接下来可以用matplotlib来实现饼图绘制,以下是具体操作步骤:
步骤1:整理数据格式
先把groupby得到的多层索引结果转换为宽格式,方便后续绘图调用:
import matplotlib.pyplot as plt # 假设你已计算好占比数据并命名为gender_ratio gender_ratio = df.groupby('AGE_B_M0')['Gender_Type_Cd_M0'].value_counts(normalize=True).unstack()
unstack()会把性别从索引转为列,每行对应一个年龄组,列值就是对应性别的占比。
步骤2:绘制单个年龄组饼图
如果只想绘制某一个特定年龄组(比如18-25岁)的饼图:
target_age = '18-25' # 获取该年龄组的占比数据 group_data = gender_ratio.loc[target_age] # 绘制饼图 plt.pie(group_data, labels=group_data.index, autopct='%.1f%%', startangle=90) plt.title(f'{target_age} 性别占比') plt.axis('equal') # 确保饼图为正圆形 plt.show()
autopct='%.1f%%'会自动标注百分比数值,startangle=90让饼图从90度位置开始绘制,视觉上更直观。
步骤3:批量绘制所有年龄组饼图(子图形式)
如果需要把所有年龄组的饼图放在同一张图中对比展示:
# 获取年龄组总数 group_count = len(gender_ratio.index) # 设置子图布局(示例为2行2列,可根据实际数量调整) fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(12, 10)) axes = axes.flatten() # 将二维子图数组转为一维,方便循环遍历 for idx, age_group in enumerate(gender_ratio.index): group_data = gender_ratio.loc[age_group] axes[idx].pie(group_data, labels=group_data.index, autopct='%.1f%%', startangle=90) axes[idx].set_title(f'{age_group} 性别占比') axes[idx].axis('equal') # 隐藏多余的空白子图(如果年龄组数量少于子图总数) for j in range(idx+1, len(axes)): axes[j].axis('off') plt.tight_layout() # 自动调整子图间距,避免重叠 plt.show()
通过上述代码就能实现你需要的效果,每个饼图会清晰展示对应年龄组的男女占比情况。
内容的提问来源于stack exchange,提问作者user19706373
相关产品推荐
相关产品推荐

