在 R 中使用 networkD3 在 RStudio Viewer 中不显示 Sankey 图表
Sankey chart is not displayed in RStudio Viewer using networkD3 in R
基于以下示例:
# Load package
library(networkD3)
# Load energy projection data
URL <- "https://cdn.rawgit.com/christophergandrud/networkD3/master/JSONdata/energy.json"
Energy <- jsonlite::fromJSON(URL)
# Now we have 2 data frames: a 'links' data frame with 3 columns (from, to, value), and a 'nodes' data frame that gives the name of each node.
head( Energy$links )
head( Energy$nodes )
# Thus we can plot it
p <- sankeyNetwork(Links = Energy$links, Nodes = Energy$nodes, Source = "source",
Target = "target", Value = "value", NodeID = "name",
units = "TWh", fontSize = 12, nodeWidth = 30)
p
我不明白这个例子中的索引是如何发生的,因为 nodes
name
和索引(source
和 target
之间没有联系links
数据框)。另外,由于 source
和 target
是索引,因此如何解释 0
?
我尝试使用以下方法创建自己的桑基图:
name<-c("J","B","A")
nodes3<-data.frame(name)
source<-c("B","B","J")
target<-c("A","A","B")
value<-c(5,6,7)
links3<-data.frame(source,target,value)
p <- sankeyNetwork(Links = data.frame(links3), Nodes = data.frame(nodes3), Source = "source",
Target = "target", Value = "value", NodeID = "name",
units = "cases", fontSize = 12, nodeWidth = 30)
p
但是,虽然一切似乎 运行 我在 RStudio Viewer 中没有得到任何图,也没有错误消息。
links
数据框中的 source
和 target
columns/variables 应该是数字,其中每个值都是索引(0 索引,而不是 1 索引像往常一样在 R) 它在 nodes
数据帧中引用的节点。
例如,在第一个示例中...
head(Energy$links)
#> source target value
#> 1 0 1 124.729
#> 2 1 2 0.597
#> 3 1 3 26.862
#> 4 1 4 280.322
#> 5 1 5 81.144
#> 6 6 2 35.000
head(Energy$nodes)
#> name
#> 1 Agricultural 'waste'
#> 2 Bio-conversion
#> 3 Liquid
#> 4 Losses
#> 5 Solid
#> 6 Gas
第一个 link 从 0(nodes
数据框的第 0 行,即名为 "Agricultural 'waste'" 的节点)到 1(nodes
的第 1 行数据框是名为 "Bio-conversion")
的节点
因此对于第二个示例,您可以使用...
name<-c("J","B","A")
nodes3<-data.frame(name)
source<-c("B","B","J")
target<-c("A","A","B")
value<-c(5,6,7)
links3<-data.frame(source,target,value)
links3$source_id <- match(links3$source, nodes3$name) - 1
links3$target_id <- match(links3$target, nodes3$name) - 1
library(networkD3)
sankeyNetwork(Links = links3, Nodes = nodes3,
Source = "source_id", Target = "target_id", Value = "value",
NodeID = "name", units = "cases", fontSize = 12, nodeWidth = 30)
基于以下示例:
# Load package
library(networkD3)
# Load energy projection data
URL <- "https://cdn.rawgit.com/christophergandrud/networkD3/master/JSONdata/energy.json"
Energy <- jsonlite::fromJSON(URL)
# Now we have 2 data frames: a 'links' data frame with 3 columns (from, to, value), and a 'nodes' data frame that gives the name of each node.
head( Energy$links )
head( Energy$nodes )
# Thus we can plot it
p <- sankeyNetwork(Links = Energy$links, Nodes = Energy$nodes, Source = "source",
Target = "target", Value = "value", NodeID = "name",
units = "TWh", fontSize = 12, nodeWidth = 30)
p
我不明白这个例子中的索引是如何发生的,因为 nodes
name
和索引(source
和 target
之间没有联系links
数据框)。另外,由于 source
和 target
是索引,因此如何解释 0
?
我尝试使用以下方法创建自己的桑基图:
name<-c("J","B","A")
nodes3<-data.frame(name)
source<-c("B","B","J")
target<-c("A","A","B")
value<-c(5,6,7)
links3<-data.frame(source,target,value)
p <- sankeyNetwork(Links = data.frame(links3), Nodes = data.frame(nodes3), Source = "source",
Target = "target", Value = "value", NodeID = "name",
units = "cases", fontSize = 12, nodeWidth = 30)
p
但是,虽然一切似乎 运行 我在 RStudio Viewer 中没有得到任何图,也没有错误消息。
links
数据框中的 source
和 target
columns/variables 应该是数字,其中每个值都是索引(0 索引,而不是 1 索引像往常一样在 R) 它在 nodes
数据帧中引用的节点。
例如,在第一个示例中...
head(Energy$links)
#> source target value
#> 1 0 1 124.729
#> 2 1 2 0.597
#> 3 1 3 26.862
#> 4 1 4 280.322
#> 5 1 5 81.144
#> 6 6 2 35.000
head(Energy$nodes)
#> name
#> 1 Agricultural 'waste'
#> 2 Bio-conversion
#> 3 Liquid
#> 4 Losses
#> 5 Solid
#> 6 Gas
第一个 link 从 0(nodes
数据框的第 0 行,即名为 "Agricultural 'waste'" 的节点)到 1(nodes
的第 1 行数据框是名为 "Bio-conversion")
因此对于第二个示例,您可以使用...
name<-c("J","B","A")
nodes3<-data.frame(name)
source<-c("B","B","J")
target<-c("A","A","B")
value<-c(5,6,7)
links3<-data.frame(source,target,value)
links3$source_id <- match(links3$source, nodes3$name) - 1
links3$target_id <- match(links3$target, nodes3$name) - 1
library(networkD3)
sankeyNetwork(Links = links3, Nodes = nodes3,
Source = "source_id", Target = "target_id", Value = "value",
NodeID = "name", units = "cases", fontSize = 12, nodeWidth = 30)