Kaggle太空泰坦尼克数据集:提取MultiIndex第二列优化饼图标签
太空泰坦尼克数据集饼图优化:标签与子图标题调整
问题说明
正在处理太空泰坦尼克数据集,需要绘制饼图展示各目的地乘客的抵达(Transported)比例。当前饼图标签包含行星名称+True/False的MultiIndex组合,需求是:
- 将行星名称设为对应子图的标题
- 仅用MultiIndex中
Transported列的True/False值作为饼图标签
但无法批量提取Transported列的值,手动单个提取只能得到单个值,无法直接作为标签使用。
数据结构(MultiIndex):
MultiIndex([( '55 Cancri e', False), ( '55 Cancri e', True), ( 'PSO J317.5-22', False), ( 'PSO J317.5-22', True), ( 'TRAPPIST-1e', False), ( 'TRAPPIST-1e', True), names=['Destination','Transported'])
当前绘图代码(已导入matplotlib.pyplot as plt):
fig, axes = plt.subplots(1,3) axes[0].pie(Survival_Destination_table.values[0:2], labels = Survival_Destination_table.index[0:2], autopct = '%1.1f%%', radius=1) axes[1].pie(Survival_Destination_table.values[2:4], labels = Survival_Destination_table.index[2:4], autopct = '%1.1f%%', radius=1) axes[2].pie(Survival_Destination_table.values[4:6], labels = Survival_Destination_table.index[4:6], autopct = "%1.1f%%", radius=1) plt.plot()
解决方案
核心修改点
- 批量提取
Transported列标签:利用MultiIndex的get_level_values方法,直接获取第二列的所有True/False值,无需手动切片。 - 按目的地分组循环绘图:通过遍历不同的目的地名称,自动对应子图并设置标题,替代手动索引切片,代码更简洁易维护。
修改后的代码
import matplotlib.pyplot as plt # 获取所有唯一的目的地名称 destinations = Survival_Destination_table.index.get_level_values('Destination').unique() fig, axes = plt.subplots(1, len(destinations), figsize=(12, 5)) # 遍历每个目的地和对应的子图 for ax, dest in zip(axes, destinations): # 筛选当前目的地的数据 subset = Survival_Destination_table.loc[dest] # 提取Transported列作为标签 labels = subset.index.get_level_values('Transported') # 绘制饼图 ax.pie(subset.values, labels=labels, autopct='%1.1f%%', radius=1) # 设置子图标题为目的地名称 ax.set_title(dest) plt.tight_layout() # 自动调整子图间距 plt.show()
代码解释
get_level_values('Destination').unique():提取所有不重复的行星名称,用于循环遍历。subset = Survival_Destination_table.loc[dest]:筛选出当前目的地的所有数据(包含True和False两行)。subset.index.get_level_values('Transported'):批量获取当前目的地对应的Transported列值(True/False),作为饼图标签。ax.set_title(dest):将子图标题设置为行星名称,满足需求。plt.tight_layout():自动调整子图之间的间距,避免标题和饼图重叠,提升美观度。
内容的提问来源于stack exchange,提问作者Kevin Kaw
相关产品推荐
相关产品推荐

