核心要点:
- 在 Excel 中创建桑基图传统上需要第三方插件和技术知识,这为业务专业人士设置了障碍。
- 匡优Excel 通过根据简单的语言指令即时生成桑基图来简化这一过程——无需编码或复杂设置。
- 与在 Excel、Python 或 R 中使用手动方法相比,匡优Excel 能在几秒钟内生成专业的桑基图可视化,让您专注于洞察而非技术实现。
- 对于需要快速可视化数据流的市场、销售和运营专业人士而言,采用像匡优Excel 这样的 AI 工具意味着更快的分析和更好的决策。
桑基图的美妙之处在于其简化多阶段系统的能力。您无需在成行的数据中搜寻最大的能量损失或预算分配,只需寻找最粗的流线即可立即发现它们。这使得它们在能源管理、财务分析、营销漏斗优化以及任何理解资源流动和转化比精确数值比较更重要的场景中都很有用。
什么是桑基图?
桑基图是一种专门的流可视化图表,其中连接箭头的宽度代表不同阶段、类别或实体之间流动的规模。与展示流程步骤的传统流程图或比较离散值的条形图不同,桑基图擅长展示数量如何在系统中移动、转化或分布。

上图展示了 10 万美元的年度预算如何在不同类别间流动。请注意,营销分配(4 万美元)的流线明显比研发(2.5 万美元)的流线更粗,使得比例差异一目了然。
桑基图的历史与演变
已知最早的桑基图出现在 1898 年,当时 Matthew Henry Phineas Riall Sankey 上尉用它来展示蒸汽机的能源效率。他的图表揭示了只有一小部分燃料能量实际贡献给了有用功,大部分都以废热形式损失了。

然而,比例流可视化的概念早于 Sankey 上尉。Charles Joseph Minard 在 1869 年创作了被许多人认为是最著名的流图,描绘了拿破仑 1812 年灾难性的俄国战役。Minard 的图表显示了军队在向俄国进军和撤退过程中规模不断缩小,线条粗细代表了幸存士兵的数量。

桑基图的组成部分
了解桑基图的关键要素有助于您有效解读现有图表并创建自己的图表。
- 节点 代表系统中的类别、阶段或实体。在我们的预算示例中,“年度预算”、“营销”和“数字广告”都是节点。源节点(如“年度预算”)通常出现在左侧,而目标节点(如“数字广告”)出现在右侧。
- 流或链接 是节点之间的方向性连接器,其宽度与它们所代表的值成比例。从年度预算到营销的粗橙色流代表 4 万美元,而到内容的流则细得多,仅代表 5 千美元。这种成比例的宽度是使桑基图如此有效的决定性特征。
- 值 是决定每条流宽度的数值数据。这些可以代表金钱、能源、人员或任何在系统中移动的可量化资源。
- 损耗 是特殊的流,代表损失、浪费或在未到达目标节点的情况下退出系统的资源。虽然我们的预算示例没有显示损耗,但您可能会在显示热损失的能源图或显示放弃流程的客户的营销漏斗图中看到它们。
如何创建桑基图
创建桑基图需要根据您偏好的工具和技术熟练程度采用不同的方法。我们将使用 Excel、Python 和 R 来演示同一个预算分配示例,以便您选择最适合您工作流程和专业水平的方法。
Excel 中的桑基图:AI 与传统插件对比
Excel 本身不包含原生的桑基图类型,这迫使用户寻找变通方法。让我们比较一下传统的插件方法和现代的 AI 驱动方法。
AI 驱动方法(使用匡优Excel)
在 Excel 中创建桑基图最快、最直观的方法是使用像 匡优Excel 这样的 AI 助手。您无需浏览菜单和安装第三方软件,只需用简单的语言陈述您的需求即可。
这个过程非常简单:
- 上传您的数据文件,其中包含每条流的源、目标和值。
- 陈述您的需求: 输入一个简单的提示,例如:“根据此数据创建一个桑基图来展示预算分配。”
- 获取您的图表: 匡优Excel 分析您的数据并即时生成专业、准确的桑基图。

这种方法消除了与插件相关的学习曲线,并自动化了整个流程。它非常适合需要快速生成复杂可视化而又不想陷入技术步骤或编写代码的业务专业人士。AI 处理图表创建,因此您可以专注于洞察。
传统方法(使用插件)
对于喜欢手动操作的用户,您需要使用第三方插件。ChartExpo 是最受欢迎的选择之一。

在创建图表之前,您需要以源-目标-值格式构建数据。每一行必须代表一个流连接。
一旦安装了 ChartExpo,过程就很直接。首先,从 Microsoft AppSource 安装插件。然后,选择您的数据范围(包括标题),并从 ChartExpo 的可视化选项中选择 桑基图。插件会检测您的源、目标和值列并提供预览,允许您创建和自定义图表。
对比: 虽然插件可以完成任务,但它们需要安装、手动选择数据以及浏览单独的界面。像匡优Excel 这样的 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, 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:设置和数据准备
首先,安装并加载所需的包,然后将数据构建成 nodes 和 links 数据框。
# 安装所需包(运行一次)
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)

生成的图表提供了与我们的 Python 和 Excel 版本相同的视觉洞察,但具有内置的交互性,可帮助用户更彻底地探索数据。
桑基图的替代方案与比较
当您的类别之间存在明确的方向性关系时,桑基图效果最佳。然而,有几种情况需要不同的可视化方法。
何时不应使用桑基图
- 没有方向性流动: 如果您的数据仅显示不同的组,而没有它们之间的移动,则条形图更合适。
- 需要精确比较: 变化的宽度使得提取精确值变得困难。如果准确性是关键,请使用表格或条形图。
- 高度复杂性: 节点或互连流过多时,桑基图可能会变得杂乱无章。
- 不熟悉的受众: 由于它们不太常见,一些受众可能会感到困惑。除非流动对您的信息至关重要,否则请坚持使用熟悉的图表类型。
特定场景下的更好替代方案
- 冲积图 更适合分类或基于时间的流动,例如跟踪选民在多次选举中如何在政党之间流动。
- 平行坐标图 更适合比较多变量数据,例如比较汽车在价格、燃油效率和安全性评级方面的差异。
- 凹凸图 更有效地处理随时间变化的排名变化,例如跟踪公司在几个季度内的市场地位。
结论
成功的可视化取决于为您的具体情况选择合适的工具。当方向性流动比精确数字更重要时,桑基图是绝佳选择。
对于 Excel 用户,选择在于使用插件的多步骤手动过程和像匡优Excel 这样的 AI 工具提供的简化、即时结果之间。对于熟悉代码的用户,Python 和 R 提供了强大、可定制的解决方案。通过了解这些不同的方法,您可以选择最适合您的技能、时间表和分析需求的方法,从而将复杂的流数据转化为清晰、有影响力的故事。
准备好无需复杂操作即可创建专业的桑基图了吗?立即试用匡优Excel,在几秒钟内将您的数据流转化为清晰的视觉洞察。
常见问题解答
桑基图和流程图有什么区别?
流程图展示流程步骤和决策点,而桑基图专门可视化不同阶段之间资源、能源或数据的流动和数量。桑基图中箭头的宽度与所测量的值成比例,而流程图侧重于流程逻辑而非数量。
什么样的数据最适合桑基图?
桑基图最适合基于流的数据,这些数据显示从一个阶段到另一个阶段的移动或转化,例如能源分配、网站转化漏斗、供应链流或预算分配。它们不适用于纯分类数据或变量之间没有方向性关系的数据集。
有哪些无需编码即可创建桑基图的好用的在线工具?
对于喜欢基于 Web 解决方案的用户,SankeyMATIC 为基本图表提供了一个免费、简单的界面,而 Flourish 为专业演示提供了更高级的功能和交互性。Google Charts 和 Highcharts 非常适合希望在网站中嵌入桑基图的开发人员,而 Visual Paradigm 作为更广泛的业务工具套件的一部分,提供了全面的图表功能。
我应该在什么时候避免使用桑基图?
当您需要精确的数值比较时(因为流宽难以精确测量),当您的数据类别过多会导致视觉混乱时,或者当您的数据点之间没有实际的方向性流动时,应避免使用桑基图。如果您的受众不熟悉这种可视化类型,也请考虑更简单的替代方案,因为新颖性可能会掩盖您的信息。
如何在桑基图中处理负值或损失?
桑基图通常不直接显示负值,因为箭头宽度代表正数量。相反,将损失显示为从节点发出的单独流出流,或使用不连接到目标节点的损耗流来表示浪费或损失的资源。
桑基图和冲积图有什么区别?
桑基图侧重于单个时间点的流量,而冲积图显示分类数据在多个时间段或阶段的变化。冲积图更适合跟踪迁移、类别变化或随时间演变的情况。