2017-09-05 88 views
2

我想从下面的堆栈溢出问题Sankey diagram in R热平衡图的转换

复制代码和问题添加一些示例数据

head(links) #Data.frame 

Source Target Weight 
Fb  Google 20 
Fb   Fb  2 
BBC  Google 21 
Microsoft BBC 16 

head(nodes) 
Fb 
BBC 
Google 
Microsoft 

代码为建设桑基过渡流

sankeyNetwork(Links = links, 
       Nodes = nodes, 
       Source = "Source", 
       Target = "Target", 
       Value = "value", 
       fontSize = 12, 
       nodeWidth = 30) 

上面提到的堆栈溢出帖子提到源和目标应该索引为0.但是,如果我尝试相同的语法,我会在我的Source和Ta中获得NA rget。什么可能导致这个错误?

回答

1

您可以将您的源和目标变量在链接数据帧的节点的索引节点的数据帧是这样的...

links <- read.table(header = T, text = " 
Source Target Weight 
Fb  Google 20 
Fb   Fb  2 
BBC  Google 21 
Microsoft BBC 16 
") 

nodes <- read.table(header = T, text = " 
name 
Fb 
BBC 
Google 
Microsoft 
") 

# set the Source and Target values to the index of the node (zero-indexed) in 
# the nodes data frame 
links$Source <- match(links$Source, nodes$name) - 1 
links$Target <- match(links$Target, nodes$name) - 1 

print(links) 
print(nodes) 

# use the name of the column in the links data frame that contains the values 
# for the value you pass to the Value parameter (e.g. "Weight" not "value") 
library(networkD3) 
sankeyNetwork(Links = links, Nodes = nodes, Source = "Source", 
       Target = "Target", Value = "Weight", 
       fontSize = 12, nodeWidth = 30) 
1

该代码在底部生成了该图。请参阅我的意见,了解代码中的更改说明。而且,一个美妙的资源是在这里:several methods with R to create Sankey (river) plots.

library(networkD3) 

# change to numeric index starting at 0. I assigned Fb to zero, and so on 
links <- data.frame(Source = c(0, 0, 1, 2), 
        Target = c(3, 0, 3, 1), 
        Weight = c(20, 2, 21, 16)) 

# a nodes dataframe (or dataframe element of a list, as in the help) is needed 
nodes <- data.frame(name = c("Fb", "Google", "BBC", "MS")) 

sankeyNetwork(Links = links, 
       Nodes = nodes, 
       Source = "Source", 
       Target = "Target", 
       Value = "Weight", # changed from "value" 
       fontSize = 12, 
       nodeWidth = 30) 

enter link description here

+0

如果回答了您的问题,请考虑点击复选标记以接受它。 – lawyeR