堆叠柱状图:部分与整体的构成

在评估离散指标的结构分解时,堆叠柱状图提供了一种高效的方式来可视化部分与整体的分布。与将数据系列横向展开的分组布局不同,堆叠图表在单个柱子边界内垂直累积数值。这种格式使得监控整体类别增长的同时,追踪内部子组件比例的变化,例如按操作系统划分的设备流量,或各部门的季度费用构成。

堆叠柱状图的原理

堆叠柱状图依赖于为多个系列分配一个匹配的堆叠标识符。当渲染引擎检测到具有堆叠字符串值的系列时,type: 'bar'它会沿着垂直的Y轴顺序堆叠数值,而不是绘制重叠或并排的柱子。

1. 基础设置

要构建一个基本的堆叠柱状图,需定义基于类别的X轴,并为每个系列在堆叠属性上应用一个共同的series数组中:

option = {
    tooltip: {
        trigger: 'axis',
        axisPointer: { type: 'shadow' }
    },
    legend: {
        data: ['直接', '自然搜索', '付费广告', '推荐']
    },
    xAxis: {
        type: 'category',
        data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
    },
    yAxis: {
        type: 'value'
    },
    series: [
        {
            name: '直接',
            type: 'bar',
            stack: 'total',
            data: [120, 132, 101, 134, 90, 230, 210]
        },
        {
            name: '自然搜索',
            type: 'bar',
            stack: 'total',
            data: [220, 182, 191, 234, 290, 330, 310]
        },
        {
            name: '付费广告',
            type: 'bar',
            stack: 'total',
            data: [150, 232, 201, 154, 190, 330, 410]
        },
        {
            name: '推荐',
            type: 'bar',
            stack: 'total',
            data: [98, 77, 101, 99, 40, 120, 110]
        }
    ]
};

 

高级结构技术

根据您的分析需求,堆叠柱状图可以调整为显示百分比分布或选择性子分组。

1. 100% 归一化堆叠柱状图

当您的主要目标是比较比例关系而非绝对数值总和时,可将数据值转换为每类别总计100%的归一化百分比:

option = {
    tooltip: {
        trigger: 'axis',
        axisPointer: { type: 'shadow' },
        formatter: '{b}
{a0}: {c0}%
{a1}: {c1}%
{a2}: {c2}%'
    },
    legend: {
        data: ['桌面', '移动设备', '平板']
    },
    xAxis: {
        type: 'category',
        data: ['Q1', 'Q2', 'Q3', 'Q4']
    },
    yAxis: {
        type: 'value',
        min: 0,
        max: 100,
        axisLabel: { formatter: '{value}%' }
    },
    series: [
        {
            name: '桌面',
            type: 'bar',
            stack: 'percentage',
            data: [60, 50, 45, 40]
        },
        {
            name: '移动设备',
            type: 'bar',
            stack: 'percentage',
            data: [30, 40, 45, 50]
        },
        {
            name: '平板',
            type: 'bar',
            stack: 'percentage',
            data: [10, 10, 10, 10]
        }
    ]
};

 

2. 多组堆叠

您可以通过在系列之间使用不同的堆叠标识符,将分组和堆叠结合在一个视图中。例如,比较实际值与目标值的总和,其中每一项都由堆叠的子组件构成:

option = {
    legend: {
        data: ['产品 A 实际值', '产品 B 实际值', '产品 A 目标值', '产品 B 目标值']
    },
    xAxis: {
        type: 'category',
        data: ['Q1', 'Q2', 'Q3', 'Q4']
    },
    yAxis: {
        type: 'value'
    },
    series: [
        {
            name: '产品 A 实际值',
            type: 'bar',
            stack: 'actual',
            data: [120, 150, 180, 200]
        },
        {
            name: '产品 B 实际值',
            type: 'bar',
            stack: 'actual',
            data: [80, 90, 100, 110]
        },
        {
            name: '产品 A 目标值',
            type: 'bar',
            stack: 'target',
            data: [130, 160, 190, 210]
        },
        {
            name: '产品 B 目标值',
            type: 'bar',
            stack: 'target',
            data: [90, 100, 110, 120]
        }
    ]
};

 

布局与样式的精细调整

视觉优化对于堆叠柱状图至关重要,以确保各段保持可区分性,同时避免视觉疲劳。

1. 段落边界与顶部圆角

在堆叠段之间应用清晰的边框分隔,并将圆角仅限制在堆叠中最顶部的系列段上:

option = {
    xAxis: {
        type: 'category',
        data: ['1月', '2月', '3月', '4月']
    },
    yAxis: {
        type: 'value'
    },
    series: [
        {
            name: '基础层',
            type: 'bar',
            stack: 'total',
            data: [320, 302, 301, 334],
            itemStyle: {
                color: '#4992ff',
                borderColor: '#ffffff',
                borderWidth: 1
            }
        },
        {
            name: '中间层',
            type: 'bar',
            stack: 'total',
            data: [120, 132, 101, 134],
            itemStyle: {
                color: '#7cffb2',
                borderColor: '#ffffff',
                borderWidth: 1
            }
        },
        {
            name: '顶层',
            type: 'bar',
            stack: 'total',
            data: [220, 182, 191, 234],
            itemStyle: {
                color: '#fddd60',
                borderColor: '#ffffff',
                borderWidth: 1,
                borderRadius: [4, 4, 0, 0] // 仅顶部段落有圆角
            }
        }
    ]
};

 

战略最佳实践

  • 限制段落数量:避免每根柱子堆叠超过4到5个类别。超过此阈值后,跨柱子比较中间段将变得视觉上困难。
  • 将基线项目锚定在底部:将最重要的指标或最大的子组件作为系列数组中的第一个项目,使其直接位于基线上,便于对齐。
  • 使用高对比度调色板或边框:在段落之间应用微妙的白色边框线,以在相邻颜色对比度相似时保持清晰区分。
滚动至顶部