You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 08:45:34