如何用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
相关产品推荐
相关产品推荐

