如何为pandas列各分组绘制子图:泰坦尼克号各舱位存活占比饼图实现
实现方案
你之前的写法是把所有舱位的存活/未存活数据放在同一个饼图中展示,自然不符合分舱位输出3个独立饼图的需求,可直接使用以下代码实现需求:
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # 加载泰坦尼克号数据集 df_titanic = sns.load_dataset('titanic') # 初始化1行3列的子图画布,可自行调整尺寸 fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15, 5)) # 舱位对应展示名称映射 pclass_name = {1: '1等舱', 2: '2等舱', 3: '3等舱'} # 饼图标签对应survived字段0/1的含义 pie_labels = ['未存活', '存活'] # 遍历每个舱位绘制对应饼图 for index, pclass in enumerate([1, 2, 3]): # 筛选当前舱位的存活统计值,按索引排序保证标签对应正确 surv_data = df_titanic[df_titanic['pclass'] == pclass]['survived'].value_counts().sort_index() # 绘制饼图,显示百分比 axes[index].pie(surv_data, labels=pie_labels, autopct='%.2f%%', startangle=90) # 子图添加标题 axes[index].set_title(f'{pclass_name[pclass]}乘客存活占比') # 强制饼图为正圆形 axes[index].axis('equal') # 自动调整子图间距 plt.tight_layout() plt.show()
补充说明:
- 每个饼图的百分比基数为对应舱位的总乘客数,符合分舱位统计占比的要求
- 如果需要单独导出每个饼图,可在循环内添加
plt.savefig(f'{pclass}等舱存活占比.png')语句单独保存
内容的提问来源于stack exchange,提问作者mert
相关产品推荐
相关产品推荐

