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

如何使用Seaborn创建堆叠柱状图?基于给定数据集实现所有ID的堆叠图表绘制

如何用Seaborn创建堆叠柱状图及实现你的定制需求

嘿,我来帮你搞定这个堆叠柱状图的问题!首先得说明下:Seaborn本身没有专门的堆叠柱状图原生函数,但咱们可以结合它的美观风格和Matplotlib的底层功能来轻松实现,下面分两部分给你讲清楚。

一、通用的Seaborn堆叠柱状图实现思路

要做堆叠柱状图,核心思路是用多层barplot叠加,借助Matplotlib的bottom参数来控制上层柱子的起始高度,步骤大概是这样:

  • 准备好需要堆叠的各个数据系列(比如你的场景里,就是match和total-match这两部分)
  • 先画底层的柱子,再画上层的柱子,上层柱子的bottom参数设为底层柱子的数值
  • 最后添加图例、标签等美化元素,保持Seaborn的风格

二、针对你的数据集实现完整堆叠图

你的数据集里已经有total和match,咱们先计算出未匹配的部分(unmatch = total - match),然后用Seaborn+Matplotlib来画出包含所有ID的堆叠图。完整代码如下:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 你的数据集
df2 = pd.DataFrame({'ID':['a','b','c','d'], 'total' : [30,50,30,50], 'match' : [5,12,14,22]})
# 计算未匹配的数量
df2['unmatch'] = df2['total'] - df2['match']

# 设置Seaborn风格
sns.set_style("whitegrid")

# 创建画布
plt.figure(figsize=(8, 5))

# 画底层:未匹配部分
sns.barplot(x='ID', y='unmatch', data=df2, width=0.6, color='#cccccc', label='Unmatch')
# 画上层:匹配部分,bottom参数指定起始高度为未匹配的数值
sns.barplot(x='ID', y='match', data=df2, width=0.6, bottom=df2['unmatch'], color='#5a9bd4', label='Match')

# 添加图表元素
plt.title('Match vs Unmatch by ID', fontsize=14)
plt.xlabel('ID', fontsize=12)
plt.ylabel('Count', fontsize=12)
plt.legend()

# 调整布局并显示
plt.tight_layout()
plt.show()

代码关键点说明:

  • 先计算unmatch列:因为堆叠需要明确每一层的数值,这里用总数量减去匹配数量得到未匹配部分
  • bottom参数:这是实现堆叠的核心,上层柱子的底部高度就是底层柱子的高度,这样就能完美叠加
  • Seaborn的风格:通过sns.set_style保持图表的美观性,你也可以换成其他风格比如darkgrid
  • 颜色和图例:给不同层设置区分度高的颜色,并添加图例让图表更清晰

运行这段代码后,就能得到包含所有4个ID的完整堆叠柱状图啦,完全符合你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 12:58:10