MCM520 ← 资料站首页 图表选择可视化指南:桑基图:看流量与转化(深度版) 打开交互阅读器 →

图表选择可视化指南:桑基图:看流量与转化(深度版)

用带宽度 flows 展示能量/物料/用户在阶段或类别间的流转与损耗,适合拆解『从哪来、到哪去』。

分类:🕸 结构图 适用:能耗/物料平衡、用户转化漏斗、资金/人口流动

一、这个图适合谁(适用场景)

  • 能耗/物料平衡
  • 用户转化漏斗
  • 资金/人口流动

二、图表结构要素

  1. 节点=阶段/类别
  2. 连线宽度=流量
  3. 可多层

三、可视化的底层逻辑

桑基图用"带宽度连线"编码流量在阶段/类别间的流转,把"从哪来、到哪去、损耗多少"这一守恒过程变成一目了然的视觉叙事。它的核心契约是流量守恒:每一层节点的流入总量必须等于流出总量(稳态),连线宽度严格正比于流量,否则图形自相矛盾、读者被骗。相比静态的饼图/堆叠柱状,桑基图擅长表达"动态流转"——能耗如何在设备间分配、用户如何在步骤间转化流失、资金如何在账户间流动。但层级越多,分支呈指数增长、视觉负担越重,故层级宜≤4。核心思想:用宽度=流量的视觉隐喻表达守恒,且每层都必须满足进出平衡。

四、视觉编码与感知推导

流量守恒(硬约束):对节点 jj,流入=流出(稳态):

∑ifij=∑kfjk \sum_i f_{ij}=\sum_k f_{jk}

任意违反(流入≠流出)都意味着"凭空生灭"或"无端消失",图即不可信。绘制前须做守恒校验。

宽度-流量线性映射:连线视觉宽度

wij∝fij w_{ij}\propto f_{ij}

保证"面积比例=流量比例",读者对宽度的感知直接对应真实流量比(宽度属长度通道,精度高)。标注关键 fijf_{ij} 数值补强精确性。

层级与读负担:设每层平均分支数 bb、层数 LL,末端节点数约 O(bL)O(b^L)。LL 每加 1 视觉元素指数增,故限制 L≤4L\le4;超过时折叠中间层或只画"总流入-总流出-关键支路"。

损耗率:节点 jj 的流失

ηj=1−∑kfjk∑ifij \eta_j=1-\frac{\sum_k f_{jk}}{\sum_i f_{ij}}

量化"在这一步丢了多少",是桑基图最该被读出的结论性数字(如转化漏斗的流失率)。

五、怎么画(步骤)

  1. 明确『流』是什么(能量/人/钱)及单位。
  2. 每层节点不重复、流量守恒(进出相等)。
  3. 用颜色区分来源或类别。
  4. 标注关键流量数值。
  5. 层级不宜过多(≤4 层)保持可读。

六、何时用 / 何时不用 / 常见丑图

  • 何时用:『流转、转化、守恒』类问题。
  • 何时不用:静态占比 → 饼/堆叠柱状。
  • 常见丑图:流量不守恒、层级过多、无数值。

七、常见坑

  • 流量不守恒
  • 层级过多乱
  • 不标数值

八、画图自检清单

  • 流定义清晰
  • 守恒校验
  • 层级适中
  • 关键流量有标注

九、配套资源与搭配

  • 网络/图结构问题怎么选
  • Python 数据可视化模板
  • 论文图表规范与排版

本指南由 MCM520 资料站自动生成(深度版),配套论文图表规范与可视化模板可在资源页下载。

十、实战案例——Python 绘制 + 图效果

桑基图用带宽度 flows 展示阶段间的流量与损耗,最适合拆解「从哪来、到哪去」。

案例场景:某知识点网站的用户访问路径——访问→浏览攻略→看范文→填写反馈。
宽度越大流量越大,从 10000 人访问到 850 人反馈,转化率 8.5%。

完整代码(Python + matplotlib)

import plotly.graph_objects as go

fig = go.Figure(data=[go.Sankey(
    node=dict(
        label=['访问', '浏览攻略', '看范文', '填写反馈'],
        color=['#2563eb', '#16a34a', '#f59e0b', '#dc2626'],
    ),
    link=dict(
        source=[0, 0, 0, 1, 1, 2],
        target=[1, 2, 3, 2, 3, 3],
        value=[4200, 3100, 850, 2800, 1200, 850]
    ))])
fig.update_layout(title='用户访问转化漏斗', font_size=12)
fig.show()

运行效果图

图X8  用户访问转化桑基图


本指南由 MCM520 资料站生成,配套 Python 代码可直接运行。