2017-09-05 84 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