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

如何用R的networkD3包基于Excel员工数据生成组织架构桑基图?

用Excel数据自动生成组织架构桑基图(networkD3包)

当然可以!完全不用再手动硬编码节点啦,咱们直接用你的Excel数据就能快速生成展示组织架构的桑基图,我给你一步步拆解操作,新手也能轻松搞定:

1. 先安装并加载需要的包

首先得装三个工具包:networkD3用来画桑基图,readxl读取Excel文件,dplyr处理数据。打开R控制台输入:

install.packages(c("networkD3", "readxl", "dplyr"))

安装好后加载它们:

library(networkD3)
library(readxl)
library(dplyr)

2. 读取你的Excel数据

假设你的Excel文件叫org_structure.xlsx,放在当前工作目录里(不知道工作目录的话可以用getwd()查看),用下面的代码读取数据:

# 替换成你的文件路径和文件名
df <- read_excel("org_structure.xlsx")

读取后可以用head(df)看看数据结构,确认是包含Employee Name和Manager Name两列的格式。

3. 把数据转换成networkD3需要的格式

桑基图需要两个核心数据:

  • nodes:所有唯一的人员列表(员工+经理),每个节点对应一个ID
  • links:记录员工和经理的连接关系,包含源节点ID(经理)、目标节点ID(员工)、连接值(这里每个员工对应1条连接)

生成nodes数据框

先提取所有出现过的名字并去重:

# 合并员工和经理列,提取唯一值
all_names <- unique(c(df$`Employee Name`, df$`Manager Name`))
# 转换成nodes数据框,networkD3需要name列
nodes <- data.frame(name = all_names)

生成名字到ID的映射

networkD3的节点索引是从0开始的,所以我们给每个名字分配一个对应的数字ID:

name_to_id <- setNames(seq_along(all_names) - 1, all_names)

生成links数据框

用dplyr把原始数据转换成连接关系:

links <- df %>%
  # 把经理和员工名字转换成对应的ID
  mutate(source = name_to_id[`Manager Name`],
         target = name_to_id[`Employee Name`],
         # 每个员工对应1条连接,所以value设为1
         value = 1) %>%
  # 只保留桑基图需要的三列
  select(source, target, value)

注意:如果你的数据里有顶级经理(没有上级,即Manager Name为空),可以先过滤掉这些行,或者给他们设置一个虚拟的“总经理/公司”节点,避免出现NA值。

4. 绘制桑基图

最后调用sankeyNetwork函数生成图:

sankeyNetwork(Links = links, Nodes = nodes,
              Source = "source", Target = "target",
              Value = "value", NodeID = "name",
              fontSize = 12, # 调整节点文字大小
              nodeWidth = 30, # 调整节点宽度
              nodePadding = 10) # 调整节点间距

运行后就会弹出交互式的桑基图啦,你可以拖拽节点调整布局,鼠标悬停还能看到连接的具体信息~

额外小提示

如果你的组织架构有多层级(比如经理还有自己的上级),这个方法同样适用,因为它会自动把所有出现的名字都纳入节点列表,不用手动调整层级。

内容的提问来源于stack exchange,提问作者manchs07

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:00:46