打造吸睛桑基圖:Excel、Python 與 R 實用指南

關鍵要點:

  • 在 Excel 中創建桑基圖傳統上需要第三方加載項和技術知識,這為業務專業人士帶來了障礙。
  • Excelmatic 簡化了這個過程,只需通過簡單的語言指令即可即時生成桑基圖——無需編碼或複雜設置。
  • 與在 Excel、Python 或 R 中手動操作的方法相比,Excelmatic 能在幾秒鐘內提供專業的桑基圖可視化,讓您專注於洞察而非技術實現。
  • 對於需要快速可視化數據流的市場、銷售和運營專業人士來說,採用像 Excelmatic 這樣的 AI 工具意味著更快的分析和更好的決策。

桑基圖的魅力在於其簡化多階段系統的能力。您無需在成行的數據中搜尋最大的能量損耗或預算分配,只需尋找最粗的流線即可立即發現它們。這使得桑基圖在能源管理、財務分析、行銷漏斗優化以及任何理解資源流動和轉化比精確數值比較更重要的場景中都很有用。

什麼是桑基圖?

桑基圖是一種專門的流動可視化圖表,其中連接箭頭的寬度代表不同階段、類別或實體之間流動的量級。與展示流程步驟的傳統流程圖或比較離散值的條形圖不同,桑基圖擅長展示數量如何在系統中移動、轉化或分配。

1

上圖展示了 10 萬美元年度預算如何流經不同類別。請注意,行銷分配(4 萬美元)的流線明顯比研發(2.5 萬美元)的粗,使得比例差異一目了然。

桑基圖的歷史與演變

已知最早的桑基圖出現在 1898 年,當時 Matthew Henry Phineas Riall Sankey 上尉用它來展示蒸汽機的能源效率。他的圖表揭示了只有一小部分燃料能量實際用於做有用功,大部分都以廢熱形式損失了。

最早的桑基圖 2

然而,比例流動可視化的概念早於 Sankey 上尉。Charles Joseph Minard 在 1869 年創作了許多人認為是最著名的流動圖,描繪了拿破崙 1812 年災難性的俄羅斯戰役。Minard 的圖表顯示了軍隊在進軍俄羅斯和撤退過程中規模的縮減,線條的粗細代表了倖存士兵的數量。

3

桑基圖的組成部分

了解桑基圖的關鍵要素有助於您有效解讀現有圖表並創建自己的圖表。

  • 節點 代表您系統中的類別、階段或實體。在我們的預算示例中,「年度預算」、「行銷」和「數位廣告」都是節點。源節點(如「年度預算」)通常出現在左側,而目標節點(如「數位廣告」)出現在右側。
  • 流線或連結 是節點之間的方向性連接器,其寬度與它們所代表的值成正比。從年度預算到行銷的粗橙色流線代表 4 萬美元,而到內容的流線則細得多,僅代表 5 千美元。這種按比例變化的寬度是使桑基圖如此有效的決定性特徵。
  • 數值 是決定每條流線寬度的數值數據。這些可以代表金錢、能源、人員或任何在系統中移動的可量化資源。
  • 損耗 是特殊的流線,代表損失、浪費或未到達目標節點就退出系統的資源。雖然我們的預算示例沒有顯示損耗,但您可能會在顯示熱量損失的能源圖或顯示放棄流程的客戶的行銷漏斗圖中看到它們。

如何創建桑基圖

創建桑基圖需要根據您偏好的工具和技術熟練程度採用不同的方法。我們將使用 Excel、Python 和 R 來逐步演示同一個預算分配示例,以便您選擇最適合您工作流程和專業知識的方法。

Excel 中的桑基圖:AI 與傳統加載項對比

Excel 本身不包含原生的桑基圖表類型,這迫使使用者尋找變通方法。讓我們比較一下傳統的加載項方法和現代的 AI 驅動方法。

AI 驅動方法(使用 Excelmatic)

在 Excel 中創建桑基圖最快、最直觀的方法是使用像 Excelmatic 這樣的 AI 助手。您無需瀏覽選單和安裝第三方軟體,只需用簡單的語言陳述您的需求即可。

過程非常簡單:

  1. 上傳您的數據文件,其中包含每條流線的來源、目標和數值。
  2. 陳述您的需求: 輸入一個簡單的提示,例如:「根據此數據創建一個桑基圖來展示預算分配。」
  3. 獲取您的圖表: Excelmatic 分析您的數據並立即生成專業、準確的桑基圖。

結果

這種方法消除了與加載項相關的學習曲線,並自動化了整個過程。它非常適合需要快速生成複雜可視化效果而又不想陷入技術步驟或編寫代碼的業務專業人士。AI 處理圖表創建,因此您可以專注於洞察。

傳統方法(使用加載項)

對於喜歡手動操作的人,您需要使用第三方加載項。ChartExpo 是最受歡迎的選項之一。

4

在創建圖表之前,您需要以來源-目標-數值的格式構建數據。每一行必須代表一個流線連接。

一旦安裝了 ChartExpo,過程就很簡單。首先,從 Microsoft AppSource 安裝加載項。然後,選擇您的數據範圍(包括標題),並從 ChartExpo 的可視化選項中選擇 Sankey Chart。加載項會檢測您的來源、目標和數值列,並提供預覽,允許您創建和自定義圖表。

對比: 雖然加載項可以完成任務,但它們需要安裝、手動選擇數據並瀏覽單獨的介面。像 Excelmatic 這樣的 AI 工具將這一切簡化為單一的對話步驟,使其顯著更快且更易於使用。

Python 中的桑基圖

對於喜歡編碼的人來說,Python 的 Plotly 庫是創建互動式、高質量桑基圖的絕佳選擇。我們將使用相同的預算分配數據來重新創建可視化效果。

步驟 1:數據準備

首先將您的數據組織成 Plotly 期望的格式:一個節點名稱列表,以及指定每條流線的來源索引、目標索引和數值的陣列。

import plotly.graph_objects as go

# 定義圖表中的所有節點
nodes = ["Annual Budget", "Marketing", "Operations", "R&D",
         "Digital Ads", "Events", "Content", "Salaries",
         "Office", "Utilities", "Software", "Equipment"]

# 定義連接(使用節點索引)
source_indices = [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3]
target_indices = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
values = [40, 35, 25, 25, 25, 10, 5, 20, 10, 5, 15, 10]

索引對應於您的 nodes 列表中的位置,因此 source_indices = [0, 0, 0] 意味著前三條流線從 "Annual Budget"(位置 0)開始。

步驟 2:基本桑基圖創建

使用 Plotly 的 Sankey 物件創建圖表的核心結構。

fig = go.Figure(data=[go.Sankey(
    node=dict(
        label=nodes,
        pad=15,
        thickness=20
    ),
    link=dict(
        source=source_indices,
        target=target_indices,
        value=values
    )
)])

這將創建一個具有默認樣式的功能性桑基圖。pad 控制節點之間的間距,而 thickness 決定節點矩形的顯示寬度。

步驟 3:樣式與自定義

使用顏色、改進的佈局和專業的格式來增強您的圖表。

# 添加顏色和透明度
fig.update_traces(
    node_color=["#1f77b4", "#ff7f0e", "#2ca02c", "#d62728",
                "#ff9999", "#ff9999", "#ff9999", "#90ee90",
                "#90ee90", "#90ee90", "#ffcccb", "#ffcccb"],
    link_color=["rgba(255, 127, 14, 0.4)", "rgba(44, 160, 44, 0.4)",
                "rgba(214, 39, 40, 0.4)", "rgba(255, 127, 14, 0.6)",
                "rgba(255, 127, 14, 0.6)", "rgba(255, 127, 14, 0.6)",
                "rgba(44, 160, 44, 0.6)", "rgba(44, 160, 44, 0.6)",
                "rgba(44, 160, 44, 0.6)", "rgba(214, 39, 40, 0.6)",
                "rgba(214, 39, 40, 0.6)"]
)

# 更新佈局以獲得更好的呈現效果
fig.update_layout(
    title="Annual Budget Allocation",
    font=dict(size=16, family="Arial Black", color="black"),
    width=900,
    height=600
)

步驟 4:顯示與導出

顯示您的圖表並以各種格式保存。

fig.show()  # 在 Jupyter notebook 或瀏覽器中顯示

# 導出選項
fig.write_html("budget_sankey.html")  # 互動式網頁版本
fig.write_image("budget_sankey.png")  # 靜態圖片

R 中的桑基圖

R 的 networkD3 套件是另一個創建互動式、適合網頁的桑基圖的強大工具。這種方法提供了內建的互動性,如懸停效果,並易於與 R Markdown 整合。

步驟 1:設置與數據準備

首先,安裝並加載所需的套件,然後將您的數據構建成 nodeslinks 數據框。

# 安裝所需套件(運行一次)
install.packages(c("networkD3", "dplyr"))

# 加載函式庫
library(networkD3)
library(dplyr)

# 創建節點數據框
nodes <- data.frame(
  name = c("Annual Budget", "Marketing", "Operations", "R&D",
           "Digital Ads", "Events", "Content", "Salaries",
           "Office", "Utilities", "Software", "Equipment")
)

# 創建連結數據框(注意:networkD3 使用從 0 開始的索引)
links <- data.frame(
  source = c(0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3),
  target = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11),
  value = c(40, 35, 25, 25, 10, 5, 20, 10, 5, 15, 10)
)

步驟 2:基本桑基圖創建

使用 sankeyNetwork() 函數創建您的圖表。

# 創建基本桑基圖
sankey_plot <- sankeyNetwork(
  Links = links,
  Nodes = nodes,
  Source = "source",
  Target = "target",
  Value = "value",
  NodeID = "name",
  units = "K USD"
)

# 顯示圖表
sankey_plot

這會生成一個互動式圖表,用戶可以將滑鼠懸停在流線上並拖動節點來重新組織佈局。

步驟 3:自定義與樣式

使用顏色、尺寸和其他格式選項來增強您的圖表。

# 帶自定義的高級桑基圖
(sankey_advanced <- sankeyNetwork(
  Links = links,
  Nodes = nodes,
  Source = "source",
  Target = "target",
  Value = "value",
  NodeID = "name",
  units = "K USD",
  fontSize = 14,
  fontFamily = "Arial",
  nodeWidth = 30,
  nodePadding = 20,
  margin = list(top = 50, right = 50, bottom = 50, left = 50),
  height = 600,
  width = 900
))

步驟 4:導出與整合選項

將您的互動式圖表保存為獨立的 HTML 文件。

# 保存為 HTML 文件
library(htmlwidgets)
saveWidget(sankey_advanced, "budget_sankey.html", selfcontained = TRUE)

# 用於靜態圖片導出(可選 - 需要 webshot2 套件)
install.packages("webshot2")
library(webshot2)
webshot("budget_sankey.html", "budget_sankey.png", vwidth = 900, vheight = 600)

5

生成的圖表提供了與我們的 Python 和 Excel 版本相同的視覺洞察,但具有內建的互動性,可以幫助用戶更徹底地探索數據。

桑基圖的替代方案與比較

當您在類別之間具有明確的方向性關係時,桑基圖效果最佳。然而,有幾種情況需要不同的可視化方法。

何時不應使用桑基圖

  • 沒有方向性流動: 如果您的數據僅顯示不同的組別而沒有它們之間的移動,則條形圖更合適。
  • 需要精確比較: 變化的寬度使得難以提取精確值。如果準確性很關鍵,請使用表格或條形圖。
  • 高度複雜: 節點或互連流線過多時,桑基圖可能會變得雜亂無章。
  • 不熟悉的受眾: 由於它們不太常見,一些受眾可能會覺得它們令人困惑。除非流動對您的訊息至關重要,否則請堅持使用熟悉的圖表類型。

針對特定場景的更好替代方案

  • 沖積圖 更適合類別性或基於時間的流動,例如追蹤選民在多次選舉中如何在政黨之間移動。
  • 平行座標圖 更適合比較多變量數據,例如比較汽車的價格、燃油效率和安全評級。
  • 凹凸圖 能更有效地處理隨時間變化的排名變化,例如追蹤公司在幾個季度內的市場地位。

結論

成功的可視化取決於為您的特定情況選擇正確的工具。當方向性流動比精確數字更重要時,桑基圖是絕佳的選擇。

對於 Excel 用戶來說,選擇介於使用加載項的手動、多步驟過程和使用像 Excelmatic 這樣的 AI 工具的簡化、即時結果之間。對於熟悉代碼的人來說,Python 和 R 提供了強大、可自定義的解決方案。通過了解這些不同的方法,您可以選擇最適合您的技能、時間線和分析需求的方法,從而將複雜的流動數據轉化為清晰、有影響力的故事。

準備好創建專業的桑基圖而無需複雜操作了嗎?立即試用 Excelmatic,在幾秒鐘內將您的數據流轉化為清晰的可視化洞察。


常見問題解答

桑基圖和流程圖有什麼區別?

流程圖展示流程步驟和決策點,而桑基圖專門可視化不同階段之間資源、能源或數據的流動和數量。桑基圖中箭頭的寬度與所測量的值成正比,而流程圖則側重於流程邏輯而非數量。

什麼類型的數據最適合桑基圖?

桑基圖最適合顯示從一個階段到另一個階段的移動或轉化的流動型數據,例如能源分配、網站轉化漏斗、供應鏈流動或預算分配。它們不適用於純粹的分類數據或變量之間沒有方向性關係的數據集。

有哪些無需編碼即可創建桑基圖的好用的線上工具?

對於喜歡基於網頁解決方案的用戶,SankeyMATIC 提供了一個免費、簡單的介面用於基本圖表,而 Flourish 則為專業演示提供了更高級的功能和互動性。Google Charts 和 Highcharts 非常適合希望在網站中嵌入桑基圖的開發人員,而 Visual Paradigm 作為更廣泛的業務工具套件的一部分,提供了全面的圖表功能。

我應該在什麼時候避免使用桑基圖?

當您需要精確的數值比較時(因為流線寬度難以精確測量),當您的數據有太多類別會造成視覺混亂時,或者當您的數據點之間沒有

AI賦能數據,決策勝券在握!

無需寫代碼與函數,簡單對話讓匡優Excel自動處理數據、生成圖表。立即免費體驗,感受AI如何顛覆你的Excel工作流 →

立即免費體驗

推薦文章

在 Excel 中建立長條圖:經典方法 vs. 即時 AI 方法
資料視覺化

在 Excel 中建立長條圖:經典方法 vs. 即時 AI 方法

厭倦了在 Excel 中點擊無數選單只為建立簡單的長條圖嗎?本指南將展示傳統方法,並介紹一種革命性的 AI 驅動方式,只需輸入簡單英文指令即可立即生成圖表。比較兩種方法,加速您的報告作業。

Tony
Excel 迷你圖:終極指南
資料視覺化

Excel 迷你圖:終極指南

掌握 Excel 走勢圖,打造精簡的儲存格內資料視覺化。本指南從基礎建立到進階自訂全面解析,並比較傳統手動方法與使用 AI 輔助工具進行即時趨勢分析的速度與簡便性。

Ruby
在 Excel 中快速建立具洞察力的盒鬚圖!
資料視覺化

在 Excel 中快速建立具洞察力的盒鬚圖!

厭倦了在 Excel 中建立盒鬚圖的複雜步驟?本指南為您展示三種方法,包含傳統途徑與革命性的 AI 驅動解決方案,只需簡單一句話即可生成完美圖表。更快解鎖深度數據洞察。

Ruby
在 Excel 中創建精闢組合圖表:經典與 AI 方法對比
資料視覺化

在 Excel 中創建精闢組合圖表:經典與 AI 方法對比

解鎖組合圖表的強大功能,在單一圖表中視覺化多元數據集。本指南將帶您逐步創建圖表,對比傳統手動流程與革命性AI驅動方法——僅需簡單指令即可生成完美圖表。

Ruby
在 Excel 中製作精美圓餅圖:手動與 AI 方法對比
數據視覺化

在 Excel 中製作精美圓餅圖:手動與 AI 方法對比

厭倦了在無盡的 Excel 選單中點擊,只為建立一個簡單的圓餅圖?本指南將逐步展示傳統方法,並介紹一種革命性的 AI 驅動方式,只需單一指令即可立即生成並自訂圖表。看看哪種方法最適合您。

Ruby
在 Excel 中快速製作甘特圖的 2 種方法(含 AI 技巧)
資料視覺化

在 Excel 中快速製作甘特圖的 2 種方法(含 AI 技巧)

為複雜的專案時程苦惱嗎?本指南將逐步教您如何在 Excel 建立甘特圖。除了傳統操作步驟,更將示範如何透過 AI 助手秒速生成專業圖表,節省您的時間與精力。

Ruby