热线电话:13121318867

登录
首页大数据时代【CDA干货】力导向图与桑基图的叠加艺术:解锁 “结构 + 流量” 双维度可视化
【CDA干货】力导向图与桑基图的叠加艺术:解锁 “结构 + 流量” 双维度可视化
2025-10-27
收藏

数据可视化领域,单一图表往往难以承载多维度信息 —— 力导向图擅长展现节点间的关联结构与空间分布,却无法直观呈现 “流量 / 权重” 的流转差异;桑基图专注于流量的路径、占比与损耗,却难以体现节点在整体网络中的位置关系。而 “叠加在力导向图上的桑基图”,通过将两种图表的核心优势融合,实现了 “网络结构” 与 “流量动态” 的同步呈现,成为分析复杂系统(如用户行为路径、供应链物流、能源传输网络)的高效工具。本文将从融合逻辑、实战场景、技术实现与优化方向四个维度,解析这种复合型可视化的价值与落地方法。

一、基础认知:为何需要 “力导向图 + 桑基图” 的叠加?

要理解融合的必要性,需先明确两种图表的 “优势互补性”—— 单一图表的局限,正是叠加设计的突破口。

1. 力导向图:展现 “结构关系”,却缺失 “流量维度”

力导向图(Force-Directed Graph)以 “模拟物理力学” 为核心逻辑:节点间通过 “斥力” 保持距离,关联节点通过 “引力” 连接,最终形成布局均衡的网络结构。其核心价值在于:

  • 直观呈现节点关联:清晰展示 “谁与谁相连”,尤其适合节点数量多、关系复杂的网络(如社交关系网、APP 功能跳转路径);

  • 体现节点重要性:可通过节点大小映射 “度数(关联数量)”,让核心节点(如社交网络中的 KOL)一目了然;

  • 动态布局适配:支持缩放、拖拽,便于探索大型网络的局部细节(如从 “全行业供应链” 聚焦到 “某区域供应商”)。

但力导向图的局限同样明显:无法量化节点间的 “流量 / 权重” 差异。例如,在 “用户从首页跳转到各功能模块” 的分析中,力导向图能展示 “首页与‘商品列表’‘购物车’‘个人中心’相连”,却无法区分 “1000 人从首页到商品列表” 与 “100 人从首页到个人中心” 的流量差异 —— 所有连接边的视觉权重一致,导致关键流量信息被掩盖。

2. 桑基图:聚焦 “流量流转”,却弱化 “结构位置”

桑基图(Sankey Diagram)以 “流” 为核心元素:节点代表 “源头 / 中转 / 终点”,连接边的宽度映射 “流量大小”,颜色区分 “流的类型”,核心价值在于:

  • 量化流量路径与占比:清晰展示 “流量从哪里来、到哪里去、占比多少”,例如 “电商平台用户从不同入口(APP、小程序、PC 端)到下单的路径占比”;

  • 凸显流量损耗 / 转化:通过边的宽度变化,直观呈现流量在各环节的流失(如 “1000 个访问用户中,800 人进入商品页,300 人加入购物车,100 人最终下单”);

  • 聚焦 “路径” 而非 “节点”:适合分析线性或多分支的流转场景,如能源从发电厂到用户的传输路径、资金在各部门的流转分配。

桑基图的局限则在于:节点布局固定,无法体现整体网络结构。例如,在 “全国供应链网络” 分析中,桑基图能展示 “北京仓库→上海门店”“广州仓库→深圳门店” 的货物流量,却无法呈现 “北京仓库与广州仓库是否存在调拨关系”“上海门店与深圳门店是否共享供应商”—— 节点仅按 “流转顺序” 排列,丢失了网络的全局结构信息。

3. 叠加的核心价值:1+1>2 的信息整合

桑基图的 “流量边” 叠加在力导向图的 “结构节点” 上时,两种图表的优势形成互补,实现了 “双维度信息同步传递”:

  • 既知 “谁相连”,也知 “流量多大”:力导向图的节点布局展示 “网络结构”(如 “首页 - 商品列表 - 购物车” 的关联),桑基图的宽窄边展示 “流量差异”(如 “首页→商品列表” 的流量是 “首页→个人中心” 的 10 倍);

  • 既见 “全局结构”,也见 “局部流转”:力导向图呈现节点在整体网络中的位置(如 “核心供应商” 位于网络中心),桑基图聚焦节点间的流量细节(如 “核心供应商向 3 个仓库的供货占比”);

  • 既懂 “静态关系”,也懂 “动态变化”:力导向图展现 “静态关联结构”(如供应链的固定合作关系),桑基图展现 “动态流量变化”(如旺季与淡季的货物流量差异)。

二、融合逻辑:如何实现 “力导向图 + 桑基图” 的和谐叠加?

叠加不是简单的 “图层覆盖”,而是需要从 “数据对齐”“视觉平衡”“交互设计” 三个层面进行精细化设计,避免出现 “结构混乱”“流量遮挡” 等问题。

1. 第一步:数据对齐 —— 确保 “节点 - 流量” 一一对应

两种图表的叠加,核心前提是 “共享同一套节点体系”,需完成以下数据预处理

  • 统一节点 ID 与属性

    • 力导向图数据:包含 “节点表”(node_id, node_name, node_type, node_size)和 “边表”(source_id, target_id);

    • 桑基图数据:需基于同一 “node_id” 构建 “流量边表”(source_id, target_id, flow_value, flow_type);

    • 关键原则:桑基图的 “source_id/target_id” 必须与力导向图的 “node_id” 完全一致,避免节点错位。

  • 关联流量与结构属性

    • 例如,在 “用户行为分析” 中,将 “用户从‘首页’(node_id=1)到‘商品列表’(node_id=2)的点击量(flow_value=1200)” 与力导向图中 “node1-node2” 的关联边绑定,确保流量边与结构边对应。
  • 处理 “多流量类型”

    • 若存在多种流量(如 “电商平台的新用户流量” 与 “老用户流量”),需在桑基图数据中添加 “flow_type” 字段,后续通过颜色区分,避免不同类型流量混淆。

2. 第二步:视觉平衡 —— 避免 “结构掩盖流量” 或 “流量破坏结构”

视觉设计的核心是 “让两种图表元素互不干扰,且信息层级清晰”,需遵循以下原则:

  • 节点与流量边的视觉分层

    • 力导向图节点:采用 “实心圆形”,颜色映射 “节点类型”(如供应商用蓝色、仓库用绿色、门店用橙色),大小映射 “节点度数 / 重要性”(核心节点更大);

    • 桑基图流量边:采用 “半透明渐变线条”,宽度映射 “flow_value”(流量越大,边越宽),颜色映射 “flow_type”(如红色代表新用户流量,蓝色代表老用户流量),透明度设为 0.6~0.8(避免遮挡力导向图的结构边);

    • 结构边与流量边的区分:力导向图的结构边用 “细实线、低饱和度颜色”(如灰色 #999),仅起 “连接标识” 作用;桑基图的流量边用 “宽线条、高饱和度颜色”,成为视觉焦点。

  • 布局适配:让流量边 “贴合” 结构边

    • 力导向图布局完成后,桑基图的流量边需沿结构边的路径绘制,避免出现 “流量边跨越其他节点” 的情况;

    • 若节点布局较密集,可通过 “力导向图参数调整”(如增大节点斥力、优化迭代次数)拉开节点间距,为流量边预留视觉空间。

  • 比例控制:避免流量边过宽或过窄

    • 流量边宽度需设置 “合理范围”(如最小宽度 1px,最大宽度 20px),避免小流量边看不见、大流量边遮挡节点;

    • 可采用 “对数缩放”(如 flow_value 取对数后映射宽度),平衡 “极大流量” 与 “极小流量” 的视觉差异。

3. 第三步:交互设计 —— 实现 “双维度信息的联动探索”

叠加图表的交互设计需支持 “结构与流量的联动查询”,让用户既能探索 “结构细节”,也能追溯 “流量来源”,核心交互功能包括:

  • hover 联动:显示 “结构 + 流量” 双重信息

    • 鼠标 hover 力导向图节点:显示 “节点名称、类型、关联节点数量”(结构信息)+“该节点的流入 / 流出总流量”(流量信息);

    • 鼠标 hover 桑基图流量边:显示 “源节点 - 目标节点名称、流量值、流量占比(如 “占源节点总流出的 25%”)、流量类型”;

    • 示例:hover “核心供应商” 节点,既显示 “关联 3 个仓库”,也显示 “总供货量 1000 吨,其中向 A 仓库供货 400 吨(40%)、B 仓库 300 吨(30%)、C 仓库 300 吨(30%)”。

  • 筛选联动:聚焦 “特定结构 / 流量”

    • 结构筛选:点击某类节点(如 “所有门店节点”),高亮该类节点及其关联边,同时高亮流经这些节点的流量边;

    • 流量筛选:选择 “流量类型 = 新用户”,仅显示新用户相关的流量边,力导向图结构边保持低饱和度,避免干扰;

    • 场景价值:在 “供应链分析” 中,筛选 “流量值 > 500 吨” 的边,可快速定位 “核心物流路径”。

  • 缩放与平移:适配大型网络探索

    • 支持整体缩放:缩放时,节点大小、流量边宽度按比例调整,避免缩放后流量边消失或节点重叠;

    • 支持局部平移:拖拽视图时,结构节点与流量边同步移动,保持相对位置不变,便于聚焦局部网络(如 “某区域的供应商 - 仓库 - 门店” 子网络)。

三、实战场景:叠加图表解决哪些实际业务问题?

“力导向图 + 桑基图” 的叠加设计,在需要同时分析 “结构关系” 与 “流量动态” 的场景中价值显著,以下为三个典型落地场景:

1. 场景 1:用户行为路径分析 —— 从 “跳转关系” 到 “流量转化”

在 APP / 网站的用户行为分析中,需同时关注 “用户能从哪些页面跳转”(结构)和 “多少用户这么跳”(流量),叠加图表可清晰呈现:

  • 结构层(力导向图):节点为 “页面”(首页、商品列表、详情页、购物车、下单页),边为 “可跳转关系”,核心页面(如首页、商品列表)因关联多而位于中心;

  • 流量层(桑基图:边宽度映射 “页面间的用户跳转量”,颜色区分 “新用户” 与 “老用户”;

  • 业务价值

    • 发现 “低效路径”:力导向图显示 “首页→详情页” 可直接跳转,但桑基图显示该路径流量仅 50 人(占首页总流出的 5%),说明用户更习惯 “首页→商品列表→详情页”;

    • 定位 “流失节点”:桑基图显示 “商品列表→购物车” 的流量为 800 人,“购物车→下单页” 仅 200 人,说明购物车到下单的转化存在瓶颈,需优化下单流程。

2. 场景 2:供应链物流网络分析 —— 从 “合作结构” 到 “货物流量”

在多节点、多路径的供应链中,需同时掌握 “谁与谁合作”(结构)和 “货物如何流转”(流量),叠加图表可解决:

  • 结构层(力导向图):节点为 “供应商、仓库、门店”,边为 “合作关系”(如供应商→仓库、仓库→门店),核心供应商因连接多个仓库而位于网络中心;

  • 流量层(桑基图:边宽度映射 “货物运输量”,颜色区分 “常温商品” 与 “冷链商品”;

  • 业务价值

    • 优化库存分配:桑基图显示 “北京仓库向天津门店的供货量占比 80%,向石家庄门店仅 20%”,但力导向图显示 “北京仓库与石家庄门店距离更近”,可调整分配比例降低物流成本;

    • 识别风险节点:桑基图显示 “某核心供应商向 3 个仓库的供货量占总货源的 70%”,力导向图显示该供应商仅与这 3 个仓库相连,需拓展备用供应商避免断供风险。

3. 场景 3:能源传输网络分析 —— 从 “电网结构” 到 “电力分配”

在电力、天然气等能源网络中,需同时监控 “节点连接稳定性”(结构)和 “能源传输效率”(流量),叠加图表可实现:

  • 结构层(力导向图):节点为 “发电厂、变电站、用户端(工业 / 居民)”,边为 “传输线路”,变电站因连接发电厂与用户端而成为关键枢纽;

  • 流量层(桑基图:边宽度映射 “电力传输量”,颜色区分 “高峰时段” 与 “低谷时段”;

  • 业务价值

    • 平衡负载:桑基图显示 “某变电站高峰时段向工业用户的传输量占比 90%,居民用户仅 10%”,结合力导向图中 “该变电站与居民用户的连接充足”,可调整分配策略保障居民用电;

    • 定位损耗点:桑基图显示 “发电厂 A→变电站 B” 的传输量为 100MW,“变电站 B→用户端” 仅 80MW,说明该线路损耗 20%,需排查线路故障。

四、技术实现:工具选择与关键代码逻辑

“力导向图 + 桑基图” 的叠加实现,需根据 “技术门槛”“交互需求” 选择合适工具,主流方案分为 “低代码工具(如 Tableau、Power BI)” 和 “代码开发(如 D3.js、ECharts)” 两类。

1. 方案 1:低代码工具 —— 快速落地,适合非技术人员

以 Tableau 为例,通过 “双层工作表叠加” 实现,核心步骤:

  • 步骤 1:构建力导向图基础层

    • 数据准备:节点表(node_id, node_name, node_type)、结构边表(source_id, target_id);

    • 制作图表:将 “source_id”“target_id” 拖到 “列”,“node_name” 拖到 “详细信息”,选择 “图表类型→力导向图”,设置节点大小映射 “关联数量”,颜色映射 “node_type”。

  • 步骤 2:构建桑基图流量层

    • 数据准备:流量边表(source_id, target_id, flow_value, flow_type);

    • 制作图表:将 “source_id”“target_id” 拖到 “列”,“flow_value” 拖到 “行”,选择 “图表类型→桑基图”,设置边宽度映射 “flow_value”,颜色映射 “flow_type”,调整边透明度为 0.7。

  • 步骤 3:叠加两层工作表

    • 在 Dashboard 中,先添加 “力导向图工作表”,再添加 “桑基图工作表”,设置桑基图工作表的 “浮动” 布局,调整位置与大小,确保节点对齐;

    • 开启 “联动筛选”:在 Dashboard 中设置 “source_id/target_id” 为联动字段,实现 “点击力导向图节点,桑基图同步高亮对应流量”。

2. 方案 2:代码开发 —— 高度定制,适合复杂交互需求

D3.js 为例(最灵活的可视化库),核心代码逻辑(简化版):

// 1. 初始化SVG画布

const svg = d3.select("#chart")

 .append("svg")

 .attr("width", 800)

 .attr("height", 600);

// 2. 加载并预处理数据(统一节点ID)

d3.json("network_data.json").then(data => {

 const nodes = data.nodes; // 节点数据:[{id, name, type}, ...]

 const links = data.links; // 结构边数据:[{source, target}, ...]

 const flows = data.flows; // 流量边数据:[{source, target, value, type}, ...]

 // 3. 构建力导向图模拟(基础结构层)

 const simulation = d3.forceSimulation(nodes)

   .force("link", d3.forceLink(links).id(d => d.id).distance(100)) // 结构边距离

   .force("charge", d3.forceManyBody().strength(-300)) // 节点斥力

   .force("center", d3.forceCenter(400, 300)); // 画布中心

 // 4. 绘制力导向图结构边(细灰色,低饱和度)

 const structureLinks = svg.append("g")

   .selectAll("line")

   .data(links)

   .enter()

   .append("line")

   .attr("stroke""#999")

   .attr("stroke-width", 1)

   .attr("stroke-opacity", 0.5);

 // 5. 绘制力导向图节点(实心圆,颜色映射类型)

 const nodesG = svg.append("g")

   .selectAll("circle")

   .data(nodes)

   .enter()

   .append("circle")

   .attr("r", d => d.type === "core" ? 15 : 8) // 核心节点更大

   .attr("fill", d => d.type === "supplier" ? "#4285F4" : "#34A853")

   .call(d3.drag() // 支持拖拽交互

     .on("start", dragstarted)

     .on("drag", dragged)

     .on("end", dragended));

 // 6. 绘制桑基图流量边(宽边,半透明,颜色映射流量类型)

 const flowLinks = svg.append("g")

   .selectAll("path")

   .data(flows)

   .enter()

   .append("path")

   .attr("d", d => { // 沿结构边路径绘制贝塞尔曲线

     const source = nodes.find(n => n.id === d.source);

     const target = nodes.find(n => n.id === d.target);

     return `M${source.x},${source.y} Q${(source.x+target.x)/2},${(source.y+target.y)/2} ${target.x},${target.y}`;

   })

   .attr("stroke", d => d.type === "new" ? "#EA4335" : "#FBBC05")

   .attr("stroke-width", d => Math.max(1, Math.log10(d.value) * 2)) // 对数缩放宽度

   .attr("stroke-opacity", 0.7)

   .attr("fill""none");

 // 7. 力导向图动画更新(确保流量边随节点移动)

 simulation.on("tick", () => {

   // 更新结构边位置

   structureLinks

     .attr("x1", d => d.source.x)

     .attr("y1", d => d.source.y)

     .attr("x2", d => d.target.x)

     .attr("y2", d => d.target.y);

   // 更新节点位置

   nodesG

     .attr("cx", d => d.x)

     .attr("cy", d => d.y);

   // 更新流量边位置(关键:随节点移动重新绘制路径)

   flowLinks

     .attr("d", d => `M${d.source.x},${d.source.y} Q${(d.source.x+d.target.x)/2},${(d.source.y+d.target.y)/2} ${d.target.x},${d.target.y}`);

 });

 // 8. 添加hover交互(显示结构+流量信息)

 flowLinks.on("mouseover"function(event, d) {

   d3.select(this).attr("stroke-opacity", 1); // 高亮流量边

   // 显示 tooltip:包含源节点、目标节点、流量值、占比

   tooltip.style("display""block")

     .html(`<b>路径</b>: ${d.source.name} → ${d.target.name}<br>

            <b>流量</b>: ${d.value}吨<br>

            <b>占比</b>: ${(d.value/d.source.totalFlow*100).toFixed(1)}%`);

 });

});

// 拖拽交互函数(省略dragstarted、dragged、dragended实现)

function dragstarted(event, d) { ... }

function dragged(event, d) { ... }

function dragended(event, d) { ... }

3. 技术选型建议

工具类型 代表工具 优势 劣势 适用场景
低代码工具 Tableau、Power BI 无需编码,快速上手;支持 Dashboard 联动 定制化程度低;大型网络性能有限 业务分析师快速验证;中小型数据集
代码开发工具 D3.js、ECharts 高度定制;支持大型网络与复杂交互 技术门槛高;开发周期长 工程师落地复杂系统;大型数据集
专业可视化工具 Gephi+Python 支持网络分析算法;可导出高清图 交互功能弱;需多工具配合 学术研究;静态报告生成

五、优化方向:避免叠加图表的 “常见陷阱”

在落地过程中,易出现 “视觉混乱”“性能卡顿”“信息过载” 等问题,需从以下维度优化:

1. 陷阱 1:节点过多导致 “结构与流量重叠”

  • 问题表现:节点数量超过 100 个时,力导向图布局拥挤,桑基图流量边相互交叉,无法区分;

  • 解决方案

    • 分层筛选:通过 “节点层级” 筛选(如先展示 “核心节点”,点击后展开 “关联节点”);

    • 聚合节点:将 “同类型、近距离” 的节点聚合(如将 “某区域的 10 家门店” 聚合为 “区域门店” 节点),流量边按聚合后节点重新计算;

    • 局部聚焦:支持 “框选放大”,仅显示选中区域的节点与流量,避免全局混乱。

2. 陷阱 2:流量边过宽遮挡 “节点与结构边”

  • 问题表现:大流量边(如宽度 20px)覆盖节点或结构边,导致无法点击节点;

  • 解决方案

    • 视觉层级调整:将 “节点” 置于最上层(z-index 最高),“流量边” 置于中间层,“结构边” 置于最下层;

    • 动态宽度:鼠标 hover 时才放大流量边宽度(默认宽度缩小 50%),既保证平时布局清晰,又能查看细节;

    • 透明度梯度:流量边越宽,透明度越低(如宽度 20px 时透明度 0.5,宽度 2px 时透明度 0.9),避免宽边遮挡。

3. 陷阱 3:交互延迟导致 “用户体验差”

  • 问题表现:节点数量多或流量边复杂时,拖拽节点、hover 显示信息出现明显延迟;

  • 解决方案

    • 性能优化(代码开发场景):

      • 使用 “WebGL” 渲染(如 Three.js)替代 SVG,提升大型网络的渲染速度;

      • 批量更新:力导向图 “tick” 事件中,每 10 帧更新一次流量边位置,而非每帧更新;

    • 简化交互(低代码场景):

      • 关闭 “实时拖拽更新”,拖拽结束后再更新流量边位置;

      • 减少 hover 信息的复杂度,仅显示核心数据(如节点名称、流量值),点击后再显示详细信息。

4. 陷阱 4:颜色编码混乱导致 “流量类型区分困难”

  • 问题表现:流量类型超过 5 种时,颜色差异不明显,无法区分 “新用户”“老用户”“流失用户” 等类型;

  • 解决方案

    • 组合编码:用 “颜色 + 线型” 区分(如红色实线代表新用户,红色虚线代表流失用户);

    • 图例优化:将 “流量类型图例” 与 “节点类型图例” 分开,标注清晰;

    • 一致性原则:同一流量类型在不同图表(如叠加图、辅助柱状图)中颜色保持一致,避免用户认知混乱。

六、总结:叠加可视化的核心是 “服务业务决策”

“力导向图与桑基图的叠加”,本质不是为了 “图表创新”,而是为了 “更高效地传递复杂系统的多维度信息”—— 让决策者无需在 “结构图表” 与 “流量图表” 之间切换,就能同时把握 “网络关系” 与 “动态流转”,减少信息获取成本。

这种融合可视化的价值,最终体现在 “业务决策效率的提升”:

  • 对用户行为分析师,它能快速定位 “低效路径” 与 “转化瓶颈”;

  • 对供应链管理者,它能直观识别 “风险节点” 与 “优化空间”;

  • 对能源调度员,它能实时监控 “传输结构” 与 “负载平衡”。

未来,随着数据复杂度的提升,“多图表叠加” 将成为可视化的重要方向 —— 但无论如何融合,核心原则始终不变:以业务需求为导向,让数据信息清晰、高效地服务于决策,而非追求 “技术复杂” 或 “视觉炫酷”。

推荐学习书籍 《CDA一级教材》适合CDA一级考生备考,也适合业务及数据分析岗位的从业者提升自我。完整电子版已上线CDA网校,累计已有10万+在读~ !

免费加入阅读:https://edu.cda.cn/goods/show/3151?targetId=5147&preview=0

数据分析师资讯
更多

OK
客服在线
立即咨询
客服在线
立即咨询