微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

具有固定节点高度的桑基图

如何解决具有固定节点高度的桑基图

我目前正在使用 R 中的 NetworkD3 库处理 Sankey 图。 无论人口如何,我都必须绘制一个具有固定高度的 Sankey。

我尝试使用 value 参数,但能够对第一列节点执行此操作,但对于其他节点列它不起作用。

这是片段。

library(dplyr)
library(tidyr)
library(data.table)
library(networkD3)
library(htmlwidgets)

df <- read.csv( header = TRUE,as.is = TRUE,text = 'name,year1,year2,year3,year4
            Bob,Hilton,Sheraton,Westin,Hyatt
            Bob,Hyatt
            John,Four Seasons,Ritz-Carlton,Sheraton
            Tom,Hyatt
            Mary,Ritz-Carlton
            Sue,Hyatt,Sheraton
            Barb,Four Seasons')

View(df)

links <-
  df %>%
    mutate(row = row_number()) %>%
    gather('column','source',-row) %>%
    mutate(group = source) %>%
    mutate(column = match(column,names(df))) %>%
    group_by(row) %>%
    arrange(column) %>%
    mutate(target = lead(source)) %>%
    ungroup() %>%
    filter(!is.na(target))

View(links)

links <-
  links %>%
    mutate(source = paste0(source,'_',column)) %>%
    mutate(target = paste0(target,column + 1)) %>%
    select(source,target,group)

View(links)

nodes <- data.frame(name = unique(c(links$source,links$target)))

View(nodes)

links$source <- match(links$source,nodes$name) - 1
links$target <- match(links$target,nodes$name) - 1
links$value <- 1

drop(grp)

grp <- data.frame(source=links$source)

View(grp)

grp_2<-
  grp %>% count(source)

View(grp_2)

colnames(grp_2)[which(names(grp_2) == "n")] <- "n_source"
colnames(grp_2)[which(names(grp_2) == "source")] <- "source"

View(grp_2)

links <- merge(x = links,y = grp_2,by = "source",all = TRUE)

links$value <- links$value/links$n_source

View(links)

nodes$name <- sub('_[0-9]+$','',nodes$name)
nodes$group <- nodes$name

View(nodes)
View(links)

sankeyNetwork(sinksRight = FALSE,Links = links,Nodes = nodes,Source = 'source',Target = 'target',Value = 'value',NodeID = 'name',nodePadding = 1,LinkGroup = "group",NodeGroup = "group",fontSize = 8.7)

任何形式的指导或帮助都会大有帮助!提前致谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。