首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将列名作为标签添加到我的Sankey绘图中

将列名作为标签添加到我的Sankey绘图中
EN

Stack Overflow用户
提问于 2021-06-11 14:19:32
回答 1查看 253关注 0票数 1

我希望将列名作为标签添加到我的Sankey plot中的R中(在Sankey图中每个列的底部)。我怎么能这么做?我的代码和数据如下。感激不尽!

代码语言:javascript
复制
    library(tidyr)
    library(dplyr)
    library(networkD3)
    links <-
      df %>% 
      mutate(row = row_number()) %>%  # add a row id
      gather('col', 'source', -row) %>%  # gather all columns
      mutate(col = match(col, names(df))) %>%  # convert col names to col nums
      mutate(source = paste0(source, '_', col)) %>%  # add col num to node names
      group_by(row) %>%
      arrange(col) %>%
      mutate(target = lead(source)) %>%  # get target from following node in row
      ungroup() %>% 
      filter(!is.na(target)) %>%  # remove links from last column in original data
      select(source, target) %>% 
      group_by(source, target) %>% 
      summarise(value = n())  # aggregate and count similar links
    nodes <- data.frame(id = unique(c(links$source, links$target)),
                        stringsAsFactors = FALSE)
    nodes$name <- sub('_[0-9]*$', '', nodes$id)
    nodes <- data.frame(rbind(nodes[which(nodes$name=="Achiever"),],nodes[which(nodes$name=="Regular"),],nodes[which(nodes$name=="Disheartened"),],nodes[which(nodes$name=="Underachiever"),]))
    links$source <- match(links$source, nodes$id) - 1
    links$target <- match(links$target, nodes$id) - 1
    sankeyNetwork(Links = links, Nodes = nodes, Source = 'source',
                  Target = 'target', Value = 'value', NodeID = 'name',iterations=0)

数据:

代码语言:javascript
复制
df <- structure(list(March = c("Disheartened", "Regular", "Regular", 
"Achiever", "Achiever", "Achiever", "Achiever", "Achiever", "Regular", 
"Achiever", "Regular", "Achiever", "Disheartened", "Achiever", 
"Regular", "Regular", "Regular", "Regular", "Achiever", "Achiever", 
"Achiever", "Regular", "Achiever", "Disheartened", "Achiever", 
"Achiever", "Regular", "Achiever", "Achiever", "Regular", "Achiever", 
"Achiever", "Regular", "Achiever", "Regular"), April = c("Disheartened", 
"Regular", "Regular", "Regular", "Achiever", "Achiever", "Achiever", 
"Achiever", "Regular", "Achiever", "Regular", "Achiever", "Disheartened", 
"Achiever", "Regular", "Disheartened", "Regular", "Regular", 
"Achiever", "Achiever", "Achiever", "Regular", "Achiever", "Disheartened", 
"Achiever", "Achiever", "Regular", "Achiever", "Achiever", "Regular", 
"Regular", "Achiever", "Achiever", "Achiever", "Regular"), May = c("Disheartened", 
"Regular", "Regular", "Regular", "Achiever", "Achiever", "Achiever", 
"Achiever", "Regular", "Achiever", "Regular", "Achiever", "Disheartened", 
"Achiever", "Regular", "Disheartened", "Regular", "Regular", 
"Achiever", "Achiever", "Achiever", "Achiever", "Achiever", "Disheartened", 
"Achiever", "Achiever", "Regular", "Achiever", "Achiever", "Regular", 
"Regular", "Achiever", "Regular", "Achiever", "Regular"), June = c("Disheartened", 
"Regular", "Regular", "Regular", "Achiever", "Achiever", "Achiever", 
"Achiever", "Regular", "Achiever", "Regular", "Achiever", "Disheartened", 
"Achiever", "Regular", "Disheartened", "Regular", "Regular", 
"Achiever", "Achiever", "Achiever", "Achiever", "Achiever", "Disheartened", 
"Achiever", "Achiever", "Regular", "Achiever", "Achiever", "Regular", 
"Regular", "Achiever", "Regular", "Achiever", "Regular")), class = "data.frame", row.names = c(NA, 
-35L))
EN

回答 1

Stack Overflow用户

发布于 2021-06-11 15:53:25

如果可能的话,您可以尝试(我推荐)非常好的ggsankey包。

代码语言:javascript
复制
library(ggsankey)
library(tidyverse)
df %>% 
  make_long(March, April, May, June) %>% 
  ggplot(aes(x = x, 
                 next_x = next_x, 
                 node = node, 
                 next_node = next_node,
                 fill = factor(node),
                 label = node)) +
  geom_sankey(flow.alpha = .3,
              node.color = "gray30",
              show.legend = F) +
  geom_sankey_label(size = 3, color = "white", fill = "gray40") +
  theme_sankey(base_size = 18) +
  xlab("")

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67938685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档