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

R中的Sankey Networks:使用Javascript Network D3或GGforce

如何解决R中的Sankey Networks:使用Javascript Network D3或GGforce

最近,我一直在学习Sankey图,并试图在R(https://rpubs.com/dmormandy/DV_Sankey)中重新创建它们。

这是我想象中的问题:我有一个人的名单,其中包括他们的名字,中间名和姓氏。它们具有通用名称,并且其名称重复。我正在尝试制作一个3层(每个名称一个层)的Sankey图,该图显示了当您转到中间名和姓氏时名称如何变得更加唯一。例如。有许多“约翰的”,但只有一个“约翰·克劳德·弗兰克”。

这是我创建的虚假数据:

library(dplyr)

name_data <- data.frame(
    "City" = c("Paris","Paris","London","Paris"),"First_Name" = c("John","John","James","Adam","Henry"),"Middle_Name" = c("Claude","Claude","Smith","Peters","Stevens","Ford","Tom","Frank"),"Last Name " = c("Tony","Tony","Frank","Carson","Phil","Lewis","Eric","David","Roberts","Scott","Xavier")
)

从这里开始,我了解到您需要创建一个链接”对象和一个“节点”对象,这些对象将用于指定名称间的关系。暂时,我尝试创建一个附加列(在Microsoft Excel中),该列计算每个名称出现在给定列中的总次数,然后将该数字放在所述名称旁边。但是我认为这不是解决此问题的正确方法

我尝试在R中完成此操作,但我认为我做的不正确:

dats_all <- name_data %>%                                                   # data
    group_by( First_Name,Middle_Name,Last.Name.) %>%  # group them
    summarise(Freq = n())                                    # add frequencies

在这里找到了这个网站,我正尝试用我的数据重新创建它:https://ggforce.data-imaginist.com/reference/geom_parallel_sets.html

library(ggforce)
library(reshape2)

 name_data <- data.frame(
    "City" = c("Paris","Xavier")
)

name_data$ID <- seq.int(nrow(name_data))
 
data <- reshape2::melt(name_data)
data <- gather_set_data(name_data)

ggplot(name_data,aes(x,id = ID,split = First_Name,value = value)) +
  geom_parallel_sets(aes( alpha = 0.3,axis.width = 0.1) +
  geom_parallel_sets_axes(axis.width = 0.1) +
  geom_parallel_sets_labels(colour = 'white')

我想我越来越近了,但是仍然存在一些问题。

>有人可以告诉我如何在R中使用基本的Sankey图(最好显示每个级别的人数,例如:https://i.redd.it/lrjdj45xrpo21.png)?

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