1. 从数据到洞察:为什么我们需要桑基图

如果你经常和数据打交道,尤其是处理那些涉及“流转”、“转化”或“分配”关系的数据,比如用户在不同渠道间的流转路径、公司预算在各个部门的分配流向,或者能源从生产到消费的转化过程,你可能会发现传统的柱状图、饼图甚至折线图都有些力不从心。它们能告诉你“有多少”,却很难清晰、直观地展示“从哪里来,到哪里去”。这正是桑基图(Sankey Diagram)大显身手的地方。

我第一次接触桑基图是在分析一个电商平台的用户行为漏斗时。当时我们用传统的漏斗图,只能看到每个步骤的流失率,但完全不清楚流失的用户到底去了哪里——是直接离开了,还是跳转到了其他页面?直到尝试用桑基图将用户的所有页面跳转路径可视化出来,那些隐藏在数据背后的“暗流”才豁然开朗。比如,我们发现大量用户在支付前一步没有直接流失,而是返回了商品详情页反复比较,这直接指向了我们的商品信息展示或促销策略存在问题。这种洞察,是其他图表难以提供的。

简单来说,桑基图是一种特定类型的流图,它用箭头的粗细来代表流量的大小,直观地展示了能量、物质或成本等在系统不同部分之间的转移情况。它的核心价值在于揭示主要流向、发现关键路径以及识别潜在的损耗点。近年来,随着数据分析在各行各业的普及,桑基图也从最初的热力学、能源领域,迅速渗透到互联网、金融、供应链管理等多个行业,成为数据可视化工具箱中不可或缺的一员。网络上关于“桑基图”的搜索热度持续攀升,也侧面印证了市场对这类深度分析工具的需求。

很多人,包括早期的我,觉得桑基图看起来很复杂,一定是编程高手或者专业设计软件才能驾驭的。但事实并非如此。今天,我就以最常用的工具之一——Origin为例,抛开那些令人望而生畏的代码和复杂操作,带你一步步实现一个专业级桑基图的“从零到一”。你会发现,它的核心逻辑非常清晰,操作也可以很“傻瓜”。无论你是科研人员、市场分析师,还是学生,只要你的数据有关联和流动,这篇手把手的指南都能让你在半小时内,亲手绘制出你的第一张桑基图。

2. 绘制前的核心准备:理解数据结构与工具选型

在动手画图之前,我们必须先把桑基图的“骨架”——也就是数据——整理明白。这一步做不好,后面所有操作都是空中楼阁。桑基图的数据结构有其特殊性,它不关心单个节点的绝对值,只关心节点之间的“流量”关系。

2.1 桑基图数据的“铁三角”模型

所有桑基图的数据,无论领域,都可以抽象为三个核心要素: 源节点(Source)、目标节点(Target)和流量值(Value) 。你可以把它想象成一份货运清单:从A仓库(源)发往B城市(目标)的货物有多少吨(流量)。

1. 源节点与目标节点: 它们代表了流程中的各个阶段或类别。例如,在分析公司部门预算分配时,“财务部”是源节点,“研发部”、“市场部”等是目标节点;在下一级分配中,“研发部”又可能成为新的源节点,其内部各项目成为目标节点。节点通常是文本型数据(字符串)。

2. 流量值: 这是一个数值,表示从源节点到目标节点转移的量。它必须是正数,决定了连接箭头的宽度。流量值的大小是相对的,图表会自动根据所有流量值的比例来渲染宽度。

3. 数据的层级与流程: 桑基图可以描述多级流程。数据需要按流程顺序组织。通常,你的数据表会是一个长长的列表,每一行记录一条“从A到B的流量”。例如:

源节点 目标节点 流量值
总部预算 研发中心 500
总部预算 营销中心 300
研发中心 项目A 200
研发中心 项目B 300
营销中心 线上广告 150
营销中心 线下活动 150

注意: 确保你的数据是“干净”的。检查是否有重复的(源,目标)对(如果有,需要合并流量值),以及流量值是否存在负数或非数值(这会导致绘图错误)。

2.2 为什么选择Origin作为入门工具?

工欲善其事,必先利其器。市面上能画桑基图的工具很多,从在线的简易工具(如RAWGraphs),到编程库(如Python的Plotly、pySankey),再到专业软件(如Origin、SigmaPlot)。对于初学者和非程序员,我强烈推荐从Origin开始,原因有三:

1. 免代码,界面化操作友好: Origin提供了直接的桑基图绘图模板,你不需要写一行代码,只需要按照规范导入数据,通过点选和设置对话框就能完成绝大部分绘图工作。这极大地降低了学习门槛,让你能专注于数据本身和图表意义的理解,而不是纠结于语法错误。

2. 强大的数据管理与预处理能力: Origin首先是一个专业的数据分析软件,其工作表(Worksheet)对数据的排序、筛选、转换支持非常完善。在准备桑基图数据时,你可能需要进行数据透视(汇总)、排序等操作,这在Origin内可以轻松完成,无需借助Excel或其他工具中转,保证了工作流的连贯性。

3. 出版级的图形输出与精细化调整: 作为科研绘图的事实标准之一,Origin在图形细节控制上无出其右。绘制出基本桑基图后,你可以对每一个节点的颜色、宽度、标签字体、位置进行像素级的调整,直到满足学术出版或商业报告的高标准要求。这种程度的定制化,是在线工具难以企及的。

当然,如果你后续需要将绘图过程自动化,或者集成到数据分析流水线中,学习Python的Plotly库会是更进阶的选择。但对于“快速上手并得到可用结果”这个目标,Origin的“所见即所得”特性无疑是最高效的路径。接下来,我们就进入Origin的实际操作环节。

3. 在Origin中一步步绘制你的第一张桑基图

假设我们已经整理好了上面那份“预算分配”的数据表,并打开了Origin软件。以下是从导入数据到生成图表的完整流程。

3.1 数据录入与工作表准备

首先,在Origin的工作表(Worksheet)中,按照桑基图模板的要求输入数据。Origin 2018及更高版本内置了桑基图模板,对数据格式有特定要求。

  1. 创建工作表: 打开Origin,默认会有一个空白工作表。我们将A(X)列、B(Y)列暂时忽略,直接从C列开始。
  2. 输入节点标签: 在C列(可命名为“标签”), 自上而下 输入所有 不重复 的节点名称。顺序可以是随意的,但通常按流程顺序或字母顺序排列会更利于后续检查。例如: 总部预算 研发中心 营销中心 项目A 项目B 线上广告 线下活动
  3. 输入连接矩阵数据: 从D列开始,每一列代表一个 源节点 。列标题最好用源节点命名(如“总部预算”)。在每一列下方,填入该源节点到 所有其他目标节点 的流量值。 这里有个关键技巧:目标节点的顺序必须严格与C列“标签”的顺序一致。
    • 在“总部预算”这一列,对应“研发中心”的行(假设“研发中心”在C列第2行)填入500,对应“营销中心”的行填入300,其他行(如“总部预算”自己、“项目A”等)填0或留空。
    • 在“研发中心”这一列,对应“项目A”的行填入200,对应“项目B”的行填入300,其他行填0。
    • 以此类推。

最终,你的工作表会形成一个“连接矩阵”,横坐标是源节点,纵坐标是所有节点标签,矩阵内的值是流量。这是Origin桑基图模板识别的标准格式之一。另一种格式是前面提到的“三列式”(源、目标、值),但矩阵格式更直观,且便于Origin计算。

3.2 调用模板并生成初始图表

数据准备好后,绘图就非常简单了。

  1. 选中数据: 用鼠标拖选你刚刚构建的整个连接矩阵数据区域(即D列及之后的所有数据,不包括C列的标签列)。
  2. 选择绘图类型: 点击顶部菜单栏的 Plot -> Category -> Sankey Diagram 。如果你的Origin版本较新,也可以在绘图工具栏的图表类型下拉菜单中直接找到“Sankey”。
  3. 生成图表: 点击后,Origin会自动生成一个初始的桑基图窗口。你会看到,节点(矩形条)已经按照C列的标签顺序排列在左右两侧,箭头根据矩阵中的流量值连接并显示了相应的宽度。

第一次看到生成的图,可能会觉得布局有点乱,节点颜色也不够分明。别担心,这只是默认状态,我们接下来进行的美化和调整才是让图表脱颖而出的关键。

3.3 图表美化与关键细节调整

生成的初始图表功能已完备,但为了提升可读性和专业性,我们需要进行一系列调整。双击图表中的任意部分,可以打开“Plot Details”对话框,这里包含了所有可调整的参数。

1. 节点(Node)设置:

  • 颜色: 在“Plot Details”的“Node”选项卡中,可以为每个节点单独设置颜色。建议对同一层级的节点使用同一色系的不同深浅,或者对不同性质的节点(如收入、支出)使用对比色。例如,所有“部门”用蓝色系,“项目”用绿色系。
  • 宽度与间距: 可以调整节点的宽度(固定值或基于流量)以及节点之间的间距,使布局更紧凑或更舒展。
  • 标签: 在“Label”选项卡中,可以设置节点标签的字体、大小、颜色和位置。通常将标签放在节点内部或紧贴其旁,确保清晰可读。

2. 连接(Link/Flow)设置:

  • 颜色: 连接的箭头默认可能继承源节点或目标节点的颜色,也可以在“Link”选项卡中统一设置或根据流量梯度着色。我个人的习惯是让连接的颜色与 源节点 一致,这样一眼就能看出流量的起点。
  • 透明度: 适当增加连接的透明度(如设置为70%),可以在连接交叉重叠时提升图表的层次感和可读性。
  • 箭头样式: 可以调整箭头头部的形状和大小,使其更明显或更柔和。

3. 布局与排序优化:

  • 有时默认的节点排序(按数据顺序)会导致连接线大量交叉,看起来混乱。你可以在工作表里调整C列标签的顺序,然后刷新图表,观察是否改善了布局。或者,有些高级选项允许按流量总和自动排序节点,让流量大的节点靠得更近,减少交叉。
  • 调整整个图表画布的大小和比例,确保所有元素都能舒适地显示,不拥挤也不松散。

4. 添加标题和图例:

  • 为图表添加一个描述性的标题,说明图表展示的内容。
  • 如果使用了复杂的着色方案(如流量梯度色),记得添加图例进行说明。

这个过程可能需要反复调试,直到找到最清晰、美观的呈现方式。记住,好的可视化是在准确传达信息的前提下,尽可能减少读者的认知负担。

4. 实战案例解析:电商用户流转路径分析

为了让你更好地理解整个流程,我们用一个更贴近互联网行业的实际案例来串联上述步骤。假设我们有一家电商网站,想要分析用户从访问首页到最终购买的核心路径,以及主要的流失点。

步骤一:定义节点与流程 我们定义以下几个关键节点: 首页 商品列表页 商品详情页 购物车页 支付页 支付成功 。此外,还有两个虚拟节点: 入口流量 (代表所有会话的起点)和 流失 (代表用户离开网站)。

步骤二:收集与整理数据 通过网站分析工具(如Google Analytics),我们可以提取出用户在不同页面间跳转的会话数。整理成如下三列式数据:

源节点 目标节点 流量(会话数)
入口流量 首页 10000
首页 商品列表页 6000
首页 流失 4000
商品列表页 商品详情页 3500
商品列表页 流失 2500
商品详情页 购物车页 1500
商品详情页 流失 2000
购物车页 支付页 1200
购物车页 流失 300
支付页 支付成功 1000
支付页 流失 200

步骤三:在Origin中构建矩阵并绘图

  1. 在C列输入所有不重复节点标签: 入口流量 首页 商品列表页 商品详情页 购物车页 支付页 支付成功 流失
  2. 从D列开始,以每个节点为源节点创建列,并按照C列顺序填入到目标节点的流量值。例如“首页”这一列,在对应“商品列表页”的行填6000,对应“流失”的行填4000,其他行填0。
  3. 选中数据矩阵,绘制桑基图。

步骤四:分析与洞察 生成的桑基图会清晰地显示:

  • 主要流失点: 最粗的“流失”箭头很可能来自 首页 商品详情页 。这提示我们需要优化首页的吸引力和商品详情页的转化能力。
  • 关键转化路径: 首页 -> 商品列表页 -> 商品详情页 -> 购物车页 -> 支付页 -> 支付成功 这条路径的箭头连贯且逐渐变细,直观展示了转化漏斗。
  • 异常流转: 如果发现从 购物车页 有较粗的箭头流回 商品详情页 ,可能意味着用户在最后关头还在比价或犹豫,可以考虑在购物车页提供更强烈的促销提示或安全保障信息。

通过这样一张图,产品、运营和设计团队可以迅速对齐认知,聚焦在流量损耗最大的环节进行优化,其沟通效率远高于罗列一堆百分比数字。

5. 进阶技巧与常见问题排坑指南

掌握了基本绘制方法后,你可能会遇到一些特定需求或棘手问题。这里分享几个我踩过坑后总结的进阶技巧和解决方案。

5.1 处理多级复杂流程与循环流

现实中的数据流往往是多级、甚至带有循环的(比如用户从支付页退回购物车)。Origin的桑基图模板在处理多级流程时表现良好,只需在数据矩阵中包含所有层级的连接即可。但对于循环流(A->B, B->A),需要注意:

  • 可视化可能混乱: 双向流动会导致连接线交叉,难以辨认。解决方案是考虑将时间维度纳入,绘制两个不同时间段的桑基图进行对比,或者使用其他图表(如和弦图)来专门展示双向关系。
  • 数据准确性: 确保循环流的数据是合理的,有时这可能是数据采集或处理中的错误。

5.2 节点颜色与流量着色的高级策略

  • 按类别着色: 这是最常用的方法。在“Plot Details”的“Node”选项卡中,选择“Color Mapping”,然后根据一个分类列(比如节点所属的部门)来分配颜色。这能让人一眼区分不同类别的节点。
  • 流量梯度着色: 如果你想突出显示流量的大小,可以对连接线使用梯度色。在“Link”选项卡中,选择“Colormap”,依据流量值(或流量百分比)从一种颜色渐变到另一种颜色(如浅蓝到深蓝)。这样,流量大的连接不仅宽,颜色也更深。
  • 手动配色: 对于报告或演示,可能需要使用公司品牌色。你可以禁用自动着色,在节点或连接的颜色设置中,逐个手动指定颜色值(RGB或HEX)。

5.3 导出与在其他平台使用

Origin绘制的图表可以导出为多种格式:

  • 高分辨率图片: 用于PPT、Word文档。建议导出为 .png .tif 格式,分辨率设置为300 dpi或更高,以确保印刷清晰。
  • 矢量图: 用于学术出版。导出为 .eps .pdf 格式,可以无限放大而不失真。这是向期刊投稿时的首选格式。
  • 注意事项: 导出前,请务必在Origin的“Export”设置中勾选“保持纵横比”和“嵌入字体”(如果使用了特殊字体),以防在其他电脑上显示异常。

5.4 常见问题与排查清单

  1. 图表不显示或显示不全:

    • 检查数据格式: 确保流量值都是正数,且连接矩阵的数据区域选择正确。
    • 检查节点标签: 源节点列标题是否在标签列中存在?目标节点的顺序是否与标签列完全一致?
    • 尝试简化数据: 先用极简的2-3个节点数据测试模板是否正常工作。
  2. 连接线缺失或错误:

    • 核对流量值: 确认在矩阵中对应位置填写的流量值无误。一个常见的错误是行、列对应关系搞反。
    • 查看隐藏值: 检查是否有单元格包含 NaN #N/A 或文本,这些会导致连接不被计算。
  3. 图形布局混乱,交叉过多:

    • 手动调整节点顺序: 在工作表的标签列(C列)中,尝试拖拽行来调整节点顺序。将流量交互密集的节点在顺序上安排得靠近一些。
    • 调整图表尺寸: 给图表一个更宽或更高的画布,为连接线提供更多伸展空间。
    • 使用曲线连接: 在“Link”选项卡中,将连接线类型从“直线”改为“曲线”(贝塞尔曲线),有时能减少视觉上的交叉感。
  4. 性能问题(数据量大时卡顿):

    • 聚合数据: 桑基图不适合展示成百上千条细微的流。考虑在数据层面进行聚合,将小流量合并到“其他”类别中。
    • 简化样式: 暂时关闭阴影、渐变等视觉效果,提升交互和刷新速度。

绘图本身是一个迭代和探索的过程。不要期望第一次就能得到完美的图表,多尝试不同的布局、配色和设置,最终找到最能清晰讲述你数据故事的那一种呈现方式。

Logo

电商企业物流数字化转型必备!快递鸟 API 接口,72 小时快速完成物流系统集成。全流程实战1V1指导,营造开放的API技术生态圈。

更多推荐