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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...