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

如何使用Seaborn绘制与Pandas效果一致的多索引数据分组占比图

实现代码及说明

你需要先将多层索引的DataFrame转为普通列结构,再使用seaborn的barplot方法,通过hue参数实现分组效果,完整可运行代码如下:

# 导入依赖库
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# ----------------------
# 可选:如果你需要重建示例数据,可运行这段代码,已有数据可跳过
data = [
    0.777506, 0.222494, 0.846252, 0.153748, 0.734029, 0.265971,
    0.709066, 0.290934, 0.855556, 0.144444, 0.763403, 0.236597,
    0.780488, 0.219512, 0.755072, 0.244928, 0.751009, 0.248991,
    0.743750, 0.256250
]
index = pd.MultiIndex.from_product(
    [['IT', 'RandD', 'accounting', 'hr', 'management', 'marketing', 'product_mng', 'sales', 'support', 'technical'], [0,1]],
    names=['Department', 'left']
)
df = pd.DataFrame(data, index=index, columns=['rate'])
# ----------------------

# 数据预处理:将多层索引转为普通列
df_plot = df.reset_index()

# 绘图配置
sns.set_style("whitegrid")
plt.figure(figsize=(14, 7))

# 绘制分组柱状图
sns.barplot(
    x="Department",
    y="rate",
    hue="left",
    data=df_plot,
    palette=["#1f77b4", "#ff7f0e"] # 这里用常见的蓝橙配色,可自行调整匹配参考图
)

# 样式调整
plt.xticks(rotation=45, ha="right", fontsize=10)
plt.title("各部门人员留存/离职占比", fontsize=15)
plt.xlabel("部门", fontsize=12)
plt.ylabel("占比", fontsize=12)
plt.legend(title="人员状态", labels=["留存", "离职"], fontsize=10)
plt.tight_layout()

# 展示图表
plt.show()

补充说明

  • 如果你已持有对应的多层索引DataFrame,直接跳过重建数据的步骤,对自己的DataFrame执行reset_index()即可,注意将数值列的列名替换为代码中对应的rate即可正常运行。
  • 若需要和参考图样式完全匹配,可调整palette配色、figsize画布大小、字体等参数。

内容的提问来源于stack exchange,提问作者Haru Harshu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:45:01