You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何制作员工地点一对一流向的Sankey图(Power BI或其他工具)

实现一对一单向流Sankey图的工具及操作方案

一、Excel(Office 365及以上版本)

  • 数据准备:确保表格每行对应一组独立的「原地点-新地点」对,新增「流量」列并赋值为1(保证每条流权重一致)。
  • 数据处理:
    1. 用Power Query添加「流ID」列,给每行分配唯一值(如1、2、3...),避免相同路径的流被自动合并。
    2. 拆分出节点表:提取所有「原地点」和「新地点」的值,去重后保存为单独的表,包含「节点名称」列。
    3. 拆分出链接表:保留「流ID」「原地点」「新地点」「流量」列。
  • 生成Sankey图:
    插入选项卡中选择「图表」→「Sankey图」,分别选择节点表和链接表,指定「节点名称」为节点字段,「原地点」「新地点」「流量」为链接字段,即可生成每条流独立的Sankey图。

二、Python(Plotly库)

  • 环境准备:执行pip install plotly pandas安装依赖库。
  • 代码实现:
    import pandas as pd
    import plotly.graph_objects as go
    
    # 读取数据(替换为你的数据路径)
    df = pd.read_csv("你的数据文件.csv")
    # 生成节点与ID的映射,避免名称重复干扰
    all_nodes = pd.concat([df['原地点'], df['新地点']]).unique()
    node_mapping = {name: idx for idx, name in enumerate(all_nodes)}
    # 转换为Plotly所需的源、目标ID格式
    df['source_id'] = df['原地点'].map(node_mapping)
    df['target_id'] = df['新地点'].map(node_mapping)
    df['flow_value'] = 1  # 每条流权重设为1
    
    # 生成Sankey图
    fig = go.Figure(data=[go.Sankey(
        node=dict(
            pad=15,
            thickness=20,
            line=dict(color="black", width=0.5),
            label=list(all_nodes)
        ),
        link=dict(
            source=df['source_id'],
            target=df['target_id'],
            value=df['flow_value']
        )
    )])
    fig.show()
    
    运行代码后,生成的Sankey图会严格按照每行数据展示独立的单向流,不会自动串联多层级路径。

三、Tableau(2020.2及以上版本)

  • 数据导入:将表格导入Tableau,把「原地点」「新地点」设置为维度字段,新建计算字段「流量」,公式为1。
  • 创建Sankey图:
    1. 将「原地点」拖至「行」,「新地点」拖至「列」,「流量」拖至「大小」。
    2. 切换标记类型为「线」,在「分析」面板中关闭「聚合」功能,确保每条行数据作为独立流展示。
    3. 右键点击图表区域,选择「转换为Sankey图」,即可得到符合要求的一对一流向图。

补充:Power BI的修正方案

若坚持使用Power BI,可通过以下步骤避免多层级流向:

  • 给每行数据添加唯一「流ID」字段,确保每条流的唯一性。
  • 安装自定义视觉对象「Sankey Diagram by OKViz」,设置时将「流ID」作为分组字段,「原地点」「新地点」作为源、目标,「流量」(设为1)作为权重,即可强制每条流独立展示。

内容的提问来源于stack exchange,提问作者Jed Nkansa-Yeboah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 10:15:13