如何为每个x轴值创建含3个不同列的堆叠柱状图
堆叠柱状图需求实现方案
这个需求完全可以实现,以下是三类常用工具的具体实现方法:
Excel 实现步骤
- 首先整理数据源:列字段按顺序设置为「工作流名称」、「月份」、「Reschedule数值」、「Cancel数值」,每一行对应单个工作流单月的两个指标数据
- 选中全部数据源,插入簇状柱形图
- 选中图表中任意一个数据系列,右键选择「更改系列图表类型」,将Reschedule和Cancel两个数据系列均设置为「堆叠柱形图」,确认配置后即可得到符合要求的图表结构
Python 实现(Matplotlib 为例)
你可以直接使用以下示例代码,替换其中的数据源为你的实际数值即可生成对应图表:
import pandas as pd import matplotlib.pyplot as plt import numpy as np # 替换为你的实际数据 raw_data = { "workstream": ["工作流A", "工作流A", "工作流A", "工作流B", "工作流B", "工作流B", "工作流C", "工作流C", "工作流C"], "month": ["1月", "2月", "3月", "1月", "2月", "3月", "1月", "2月", "3月"], "reschedule": [12, 9, 14, 7, 11, 8, 15, 6, 10], "cancel": [5, 7, 3, 6, 4, 8, 2, 9, 5] } df = pd.DataFrame(raw_data) # 基础参数配置 ws_list = df["workstream"].unique() month_list = df["month"].unique() ws_count = len(ws_list) month_count = len(month_list) bar_width = 0.25 x_axis = np.arange(ws_count) # 按月份绘制堆叠柱 for idx, month in enumerate(month_list): month_filter = df["month"] == month plt.bar(x_axis + idx*bar_width, df[month_filter]["reschedule"], width=bar_width, label=f"{month} 改期") plt.bar(x_axis + idx*bar_width, df[month_filter]["cancel"], width=bar_width, bottom=df[month_filter]["reschedule"], label=f"{month} 取消") # 坐标轴配置 plt.xticks(x_axis + bar_width*(month_count-1)/2, ws_list) plt.xlabel("工作流(Workstreams)") plt.ylabel("业务数量") plt.legend() plt.show()
Tableau 实现步骤
- 将「工作流」字段拖入列功能区,再将「月份」字段拖入列功能区,放在工作流字段的右侧
- 先将「Reschedule」字段拖入行功能区,再将「Cancel」字段拖入行功能区的「Reschedule」数值上,系统会自动触发指标堆叠
- 标记卡选择「条形图」,调整标记卡的颜色配置区分改期、取消两个指标即可
内容的提问来源于stack exchange,提问作者andie_6655321
相关产品推荐
相关产品推荐

