R 为组织结构图创建Sankey图
我在excel表格中有两列相关数据: 员工姓名和经理姓名 我想在R中使用networkD3创建一个包含这些数据的Sankey图,以显示我们的组织是如何分裂的。我对R是一个相对的业余爱好者,但我已经能够通过硬编码每个节点来生成Sankey图表。用我掌握的数据能做到这一点吗R 为组织结构图创建Sankey图,r,visualization,sankey-diagram,networkd3,orgchart,R,Visualization,Sankey Diagram,Networkd3,Orgchart,我在excel表格中有两列相关数据: 员工姓名和经理姓名 我想在R中使用networkD3创建一个包含这些数据的Sankey图,以显示我们的组织是如何分裂的。我对R是一个相对的业余爱好者,但我已经能够通过硬编码每个节点来生成Sankey图表。用我掌握的数据能做到这一点吗 library(networkD3) nodes = data.frame("name" = c(All_Employees$`Employee Name`)) links
library(networkD3)
nodes = data.frame("name" =
c(All_Employees$`Employee Name`))
links = as.data.frame(matrix(c(
All_Employees$`Employee Name`,All_Employees$`Manager Name`,1),
byrow = TRUE, ncol = 3))
names(links) = c("source", "target", "value")
sankeyNetwork(Links = links, Nodes = nodes,
Source = "source", Target = "target",
Value = "value", NodeID = "name",
fontSize= 12, nodeWidth = 30)
Sankey图表可能不是这方面的最佳绘图类型,但如果您首先将数据安排为正确的格式,它将起作用
All_Employees <-
read.csv(header = T, na.strings = "", stringsAsFactors = F, check.names = F,
text = "
Employee Name,Manager Name
Betty,
Tom,Betty
Bob,Betty
Mark,Tom
John,Tom
Sally,Bob")
node_names <- factor(sort(unique(as.character(unname(unlist(All_Employees))))))
nodes <- data.frame(name = node_names)
links <- data.frame(source = match(All_Employees$`Manager Name`, node_names) - 1,
target = match(All_Employees$`Employee Name`, node_names) - 1,
value = 1)
links <- links[!is.na(links$source), ]
library(networkD3)
sankeyNetwork(Links = links, Nodes = nodes,
Source = "source", Target = "target",
Value = "value", NodeID = "name",
fontSize = 12, nodeWidth = 30)
或者,如果您使用的是开发版本的networkD3
,则可以更轻松地使用新的treeNetwork()
函数,该函数具有更多的自定义功能(但由于仍在开发中,因此仍然存在错误)
请提供一个可复制的示例。
library(dplyr)
library(data.tree)
library(networkD3)
All_Employees %>%
filter(!is.na(`Manager Name`)) %>%
data.tree::FromDataFrameNetwork() %>%
data.tree::ToListExplicit(unname = TRUE) %>%
diagonalNetwork()
library(dplyr)
library(networkD3)
All_Employees %>%
rename(nodeId = `Employee Name`, parentId = `Manager Name`) %>%
mutate(name = nodeId) %>%
treeNetwork(direction = "down", linkType = "elbow")