如何创建按两类(A、B)分组的堆叠条形图
嘿,我来帮你搞定这个A、B两类分组的堆叠条形图!不管你习惯用代码还是可视化工具,我都给你整理了具体的实现步骤,照着来就行~
方法一:用Python(Matplotlib/Seaborn)实现
如果你喜欢用代码实现,Python的Matplotlib和Seaborn是最常用的工具,先给你举个实际例子:
首先得把数据整理成DataFrame格式,假设你的数据表是这样的(你可以把下面的示例数据换成自己的真实数据):
import pandas as pd # 示例数据表,替换成你自己的列名和数值 data = { "分组名称": ["产品组A", "产品组B", "产品组C", "产品组D"], "A类数据": [120, 180, 90, 210], "B类数据": [80, 100, 150, 70] } df = pd.DataFrame(data)
用Matplotlib绘制堆叠条形图
这个方法更灵活,能精准控制每个部分的样式:
import matplotlib.pyplot as plt # 设置x轴的位置,对应每个分组 x = range(len(df["分组名称"])) bar_width = 0.6 # 条形的宽度 # 先画A类的条形,作为堆叠的底层 plt.bar(x, df["A类数据"], width=bar_width, label="A类", color="#2ecc71") # 再画B类的条形,底部设置为A类的数值,实现堆叠效果 plt.bar(x, df["B类数据"], width=bar_width, bottom=df["A类数据"], label="B类", color="#3498db") # 设置x轴的标签为分组名称 plt.xticks(x, df["分组名称"]) # 添加图表标题和坐标轴标签 plt.title("A、B两类分组堆叠条形图", fontsize=14) plt.xlabel("分组", fontsize=12) plt.ylabel("数据数值", fontsize=12) # 显示图例 plt.legend() # 调整布局,防止标签被截断 plt.tight_layout() # 显示图表 plt.show()
用Seaborn绘制堆叠条形图
如果想更简洁,可以用Seaborn,但需要先把宽格式数据转成长格式:
# 把宽格式数据转成长格式(适合Seaborn的输入要求) df_long = df.melt(id_vars="分组名称", var_name="数据类别", value_name="数值") import seaborn as sns # 绘制堆叠条形图,estimator=sum表示对同一分组下的类别求和,ci=None去掉误差线 sns.barplot(data=df_long, x="分组名称", y="数值", hue="数据类别", estimator=sum, ci=None, palette=["#2ecc71", "#3498db"]) plt.title("A、B两类分组堆叠条形图", fontsize=14) plt.tight_layout() plt.show()
方法二:用Excel实现(零代码方案)
如果不想写代码,Excel就能快速搞定,步骤超简单:
- 第一步:把你的数据整理成Excel表格,确保第一列是分组类别,后面两列分别是A类和B类的数值(表头要清晰),比如:
分组类别 A类数值 B类数值 组1 10 15 组2 25 20 组3 18 22 - 第二步:选中整个数据区域(包括表头),点击顶部菜单栏的「插入」选项卡,找到「图表」组里的「条形图」,选择堆积条形图(注意是「堆积」,不是「簇状」哦)
- 第三步:美化图表——右键可以修改标题、调整坐标轴标签、移动图例位置,还能给每个堆叠部分添加数据标签(右键条形→添加数据标签),让数值一目了然。
小提示
- 不管用哪种方法,核心是确保你的数据结构正确:每个主分组对应一行,A、B两类的数值各占一列(或者转成长格式适配Seaborn)
- 代码里的列名和颜色都可以根据自己的需求修改,不用局限于示例里的设置~
内容的提问来源于stack exchange,提问作者dukusdz
相关产品推荐
相关产品推荐

