如何在Google Sheets中基于百分比列制作周期状态堆叠条形图
问题:在Google Sheets中制作对应状态占比的堆叠条形图
我有一张记录机器每个周期状态及对应时间占比的表格,数据如下:
| Cycle | State | Percentage_State |
|---|---|---|
| 1 | 10 | 60 |
| 1 | 11 | 40 |
| 2 | 27 | 30 |
| 2 | 26 | 70 |
| 3 | 20 | 100 |
| 4 | 23 | 100 |
| 5 | 16 | 85 |
| 5 | 17 | 5 |
| 5 | 18 | 10 |
我需要制作堆叠条形图:X轴为周期(Cycle),Y轴为0-100的占比刻度;每个周期的条形按对应状态的占比堆叠,比如周期1分为60%的状态10和40%的状态11,周期5分为85%的状态16、5%的状态17和10%的状态18。但直接用Google Sheets的堆叠图表选项无法将State标签对应到Percentage_State的数值设置条长,请问该怎么实现?
解决方案
第一步:重新整理数据格式
Google Sheets的堆叠条形图要求状态作为列标题,周期作为行标签,每个单元格对应该周期下对应状态的占比。你需要把现有数据转成如下结构:
| Cycle | 10 | 11 | 26 | 27 | 20 | 23 | 16 | 17 | 18 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | 60 | 40 | |||||||
| 2 | 70 | 30 | |||||||
| 3 | 100 | ||||||||
| 4 | 100 | ||||||||
| 5 | 85 | 5 | 10 |
可以用QUERY函数快速转换,假设原始数据在A1:C10区域,在新单元格(比如E1)输入公式:
=QUERY(A1:C10, "SELECT A, MAX(IF(B=10,C,0)), MAX(IF(B=11,C,0)), MAX(IF(B=26,C,0)), MAX(IF(B=27,C,0)), MAX(IF(B=20,C,0)), MAX(IF(B=23,C,0)), MAX(IF(B=16,C,0)), MAX(IF(B=17,C,0)), MAX(IF(B=18,C,0)) GROUP BY A LABEL A 'Cycle', MAX(IF(B=10,C,0)) '10', MAX(IF(B=11,C,0)) '11', MAX(IF(B=26,C,0)) '26', MAX(IF(B=27,C,0)) '27', MAX(IF(B=20,C,0)) '20', MAX(IF(B=23,C,0)) '23', MAX(IF(B=16,C,0)) '16', MAX(IF(B=17,C,0)) '17', MAX(IF(B=18,C,0)) '18'")
这个公式会自动按周期分组,把每个状态的占比填充到对应列,空值显示为空白,不影响后续图表生成。
第二步:插入堆叠条形图
- 选中整理好的整个数据区域(包括表头和所有行)
- 点击顶部菜单栏的插入 > 图表
- 在右侧图表编辑器中,选择条形图分类下的堆叠条形图
- 调整细节设置:
- 在「数据范围」确认选中区域正确
- 在「轴」设置里,将Y轴范围固定为0-100,X轴设为「Cycle」
- 在「系列」里可以给每个状态设置专属颜色,方便区分
- 开启「数据标签」,直接显示每个堆叠部分的占比数值
注意事项
- 如果后续新增状态或周期,需要更新
QUERY函数里的状态值(比如新增状态21,就添加MAX(IF(B=21,C,0))并在标签里补充'21') - 空白单元格会被视为0,不会影响堆叠效果,因为对应周期确实没有该状态的占比
内容的提问来源于stack exchange,提问作者Pixel Boujee
相关产品推荐
相关产品推荐

