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

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()

解决方案

核心修改点

  1. 批量提取Transported列标签:利用MultiIndex的get_level_values方法,直接获取第二列的所有True/False值,无需手动切片。
  2. 按目的地分组循环绘图:通过遍历不同的目的地名称,自动对应子图并设置标题,替代手动索引切片,代码更简洁易维护。

修改后的代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 15:06:16