堆疊面積圖:累積趨勢與貢獻分析

當您需要追蹤整體總量與個別次級元件貢獻隨時間的變化時,堆疊面積圖是最理想的視覺化工具。垂直堆疊面積填滿會產生一個連續的綜合視圖,其中最上方的線代表總合總量,而各個帶狀寬度則顯示次分類貢獻的變化情況,例如數個月內總網站流量按搜尋引擎、自然流量和直接推薦管道的分解情況。

堆疊面積圖的運作原理

堆疊面積圖結合了線系列配置與匹配的堆疊屬性。當渲染引擎偵測到多個系列中具有相同堆疊識別符時,若這些系列皆具有type: 'line'areaStyleareaStyle 活性,它會沿著垂直的 Y 軸,將每個資料點依序堆疊在前一個系列線路的上方。

1. 基本設定

要建立基本的堆疊面積圖,請定義一個連續的 X 軸,設定type: 'line'於每個系列,啟用areaStyle,並為所有系列分配相同的堆疊識別符:

option = {
    tooltip: {
        trigger: 'axis',
        axisPointer: { type: 'cross' }
    },
    legend: {
        data: ['電子郵件', '聯合廣告', '影片廣告', '直接']
    },
    xAxis: {
        type: 'category',
        boundaryGap: false,
        data: ['一', '二', '三', '四', '五', '六', '日']
    },
    yAxis: {
        type: 'value'
    },
    series: [
        {
            name: '電子郵件',
            type: 'line',
            stack: '總計',
            areaStyle: {},
            data: [120, 132, 101, 134, 90, 230, 210]
        },
        {
            name: '聯合廣告',
            type: 'line',
            stack: '總計',
            areaStyle: {},
            data: [220, 182, 191, 234, 290, 330, 310]
        },
        {
            name: '影片廣告',
            type: 'line',
            stack: '總計',
            areaStyle: {},
            data: [150, 232, 201, 154, 190, 330, 410]
        },
        {
            name: '直接',
            type: 'line',
            stack: '總計',
            areaStyle: {},
            data: [320, 332, 301, 334, 390, 330, 320]
        }
    ]
};

 

進階結構技術

堆疊面積圖可設定為專注於整體累積成長,或隨時間變化的相對比例變化。

1. 100% 正規化百分比面積圖

當評估比例變化而非總體累積量的時間變化時,請將您的資料集正規化為每個水平時間點皆為 100%:

option = {
    tooltip: {
        trigger: 'axis',
        formatter: '{b}
{a0}: {c0}%
{a1}: {c1}%
{a2}: {c2}%'
    },
    legend: {
        data: ['桌面', '行動裝置', '平板']
    },
    xAxis: {
        type: 'category',
        boundaryGap: false,
        data: ['2023', '2024', '2025', '2026']
    },
    yAxis: {
        type: 'value',
        min: 0,
        max: 100,
        axisLabel: { formatter: '{value}%' }
    },
    series: [
        {
            name: '桌面',
            type: 'line',
            stack: 'percent',
            smooth: true,
            areaStyle: {},
            data: [65, 55, 48, 40]
        },
        {
            name: '行動裝置',
            type: 'line',
            stack: 'percent',
            smooth: true,
            areaStyle: {},
            data: [25, 35, 42, 50]
        },
        {
            name: '平板',
            type: 'line',
            stack: 'percent',
            smooth: true,
            areaStyle: {},
            data: [10, 10, 10, 10]
        }
    ]
};

 

微調佈局與樣式

由於堆疊區域完全覆蓋背景,調整填滿的不透明度與線條粗細,有助於保持各層之間的清晰與可讀性。

1. 自訂圖層不透明度與邊界分隔

在略帶透明的區域填滿上設定實線線條,可創造出相鄰堆疊帶之間清晰的視覺邊界:

option = {
    tooltip: {
        trigger: 'axis'
    },
    xAxis: {
        type: 'category',
        boundaryGap: false,
        data: ['Q1', 'Q2', 'Q3', 'Q4']
    },
    yAxis: {
        type: 'value'
    },
    series: [
        {
            name: '產品 A',
            type: 'line',
            stack: '量',
            smooth: true,
            lineStyle: { width: 2, color: '#5470c6' },
            areaStyle: { color: '#5470c6', opacity: 0.7 },
            data: [120, 150, 180, 210]
        },
        {
            name: '產品 B',
            type: 'line',
            stack: '量',
            smooth: true,
            lineStyle: { width: 2, color: '#91cc75' },
            areaStyle: { color: '#91cc75', opacity: 0.7 },
            data: [220, 280, 250, 310]
        },
        {
            name: '產品 C',
            type: 'line',
            stack: '量',
            smooth: true,
            lineStyle: { width: 2, color: '#fac858' },
            areaStyle: { color: '#fac858', opacity: 0.7 },
            data: [150, 190, 220, 260]
        }
    ]
};

 

策略性最佳實務

  • 將穩定的系列置於底部:將最大或波動最小的系列置於堆疊底部,以建立上方各帶可預測的基準。
  • 限制帶數:堆疊超過 4 到 5 個系列會使中間的帶狀區域難以準確評估。建議將次要類別合併為「其他」類別。
  • 使用axisPointer: { type: 'cross' }:將懸停十字線與持續顯示的提示框結合,可輕鬆精確定位密集垂直堆疊中的特定日期值。
返回頂端