【问题标题】:Creating a Sankey Diagram for an Org Chart为组织结构图创建桑基图
【发布时间】:2018-03-01 15:26:10
【问题描述】:

我的 Excel 表中有两个相关列的数据: 员工姓名和经理姓名。

我想在 R 中使用 networkD3 使用这些数据创建一个桑基图,以显示我们的组织是如何拆分的。我是 R 的相对业余爱好者,但我已经能够通过对每个节点进行硬编码来生成桑基图。是否可以使用我拥有的数据执行此操作?

    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)

【问题讨论】:

  • 请提供一个可重现的例子。

标签: r visualization sankey-diagram networkd3 orgchart


【解决方案1】:

桑基图可能不是最好的绘图类型,但如果您首先将数据排列成正确的格式,它会起作用...

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)

或者,您可以使用diagonalNetwork() 创建一个可能更适合的树形图...

library(dplyr)
library(data.tree)
library(networkD3)

All_Employees %>% 
  filter(!is.na(`Manager Name`)) %>% 
  data.tree::FromDataFrameNetwork() %>%
  data.tree::ToListExplicit(unname = TRUE) %>%
  diagonalNetwork()

或者,如果您使用的是 networkD3 的开发版,您可以更轻松地使用新的 treeNetwork() 功能,该功能具有更多自定义功能(但仍然存在错误,因为它仍在开发中)...

library(dplyr)
library(networkD3)

All_Employees %>% 
  rename(nodeId = `Employee Name`, parentId = `Manager Name`) %>% 
  mutate(name = nodeId) %>% 
  treeNetwork(direction = "down", linkType = "elbow")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    相关资源
    最近更新 更多