桑基圖:方向性流動與流量轉變

在追蹤連續轉移、資源分配或多階段使用者旅程時,桑基圖是首選的視覺化工具。透過在連續階段節點之間繪製成比例的流動帶,桑基圖能呈現總數量如何在複雜系統中分裂、合併與轉變——例如網站使用者轉化漏斗、能源分配網絡,或組織預算分配。

桑基圖的運作原理

在 Apache ECharts 中,桑基圖使用type: 'sankey'。與圖表類似,桑基圖由一組明確的節點(或data)以及有方向的links(或)。每個連結包含一個來源節點名稱、一個目標節點名稱,以及一個數值型,用來決定連接流線的視覺寬度。

1. 基本設定

要建立基本的桑基圖,請在data內宣告您的節點項目,並在links:

option = {
    tooltip: {
        trigger: 'item',
        triggerOn: 'mousemove'
    },
    series: [
        {
            type: 'sankey',
            data: [
                { name: '總收入' },
                { name: '產品銷售' },
                { name: '服務' },
                { name: '行銷' },
                { name: '研發' },
                { name: '利潤' }
            ],
            links: [
                { source: '總收入', target: '產品銷售', value: 70 },
                { source: '總收入', target: '服務', value: 30 },
                { source: '產品銷售', target: '行銷', value: 30 },
                { source: '產品銷售', target: '研發', value: 25 },
                { source: '產品銷售', target: '利潤', value: 15 },
                { source: '服務', target: '利潤', value: 30 }
            ],
            emphasis: {
                focus: 'adjacency'
            },
            lineStyle: {
                color: 'gradient',
                curveness: 0.5
            }
        }
    ]
};

 

進階結構技術

桑基圖可透過垂直流動方向、多層節點顏色以及動態連結強調來自訂,以追蹤複雜網絡中個別路徑。

1. 垂直流動方向

設定 orient: 'vertical'以將水平階段流動轉換為自上而下的垂直瀑布視圖:

option = {
    tooltip: {
        trigger: 'item',
        triggerOn: 'mousemove'
    },
    series: [
        {
            type: 'sankey',
            orient: 'vertical',
            nodeWidth: 20,
            nodeGap: 16,
            data: [
                { name: '網站訪問量' },
                { name: '產品頁面' },
                { name: '直接跳出' },
                { name: '購物車' },
                { name: '結帳' }
            ],
            links: [
                { source: '網站訪問量', target: '產品頁面', value: 1000 },
                { source: '網站訪問量', target: '直接跳出', value: 400 },
                { source: '產品頁面', target: '購物車', value: 600 },
                { source: '購物車', target: '結帳', value: 450 }
            ],
            lineStyle: {
                color: 'source',
                curveness: 0.5
            }
        }
    ]
};

 

微調佈局與連結樣式

調整節點間距、線條曲率以及懸停強調行為,可讓複雜的多階段流程保持清晰且易於閱讀。

1. 節點間距控制與來源-目標漸變流

自訂 nodeGap並設定 lineStyle.color: 'gradient'可創造階段之間的平滑顏色過渡:

option = {
    series: [
        {
            type: 'sankey',
            left: '5%',
            right: '15%',
            nodeWidth: 24,
            nodeGap: 18,
            draggable: true,
            label: {
                position: 'right',
                color: '#333',
                fontSize: 12
            },
            data: [
                { name: '來源 A', itemStyle: { color: '#5470c6' } },
                { name: '來源 B', itemStyle: { color: '#91cc75' } },
                { name: '階段 1', itemStyle: { color: '#fac858' } },
                { name: '階段 2', itemStyle: { color: '#ee6666' } },
                { name: '最終輸出', itemStyle: { color: '#73c0de' } }
            ],
            links: [
                { source: '來源 A', target: '階段 1', value: 50 },
                { source: '來源 B', target: '階段 1', value: 30 },
                { source: '階段 1', target: '階段 2', value: 60 },
                { source: '階段 1', target: '最終輸出', value: 20 },
                { source: '階段 2', target: '最終輸出', value: 60 }
            ],
            lineStyle: {
                color: 'gradient',
                curveness: 0.6,
                opacity: 0.4
            }
        }
    ]
};

 

戰略最佳實務

  • 維持流量守恆: 確保流入節點的值總和等於或在邏輯上能解釋流出的值,以避免產生具有誤導性的視覺間隙。
  • 啟用 強調焦點:「鄰近性」: 在處理多階段流程時,將鼠標懸停在相鄰連結上以聚焦,可讓使用者在無視覺干擾的情況下隔離特定路徑。
  • 使用漸變連結: 設定 lineStyle.color:'gradient' 可順暢地將源節點顏色漸變至目標節點顏色,使多階段轉換在視覺上更直觀。
返回頂端