Диаграмма Санки не отображается в RStudio Viewer с использованием networkD3 в R - PullRequest
0 голосов
/ 02 апреля 2020

На основе приведенного ниже примера:

# 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 кадра данных). Кроме того, как это 0 объясняется, поскольку source и target являются индексами?

Я пытался создать свою собственную диаграмму sankey с:

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 и никаких сообщений об ошибках.

1 Ответ

1 голос
/ 02 апреля 2020

Столбцы / переменные source и target во фрейме данных links должны быть нумерацией c, где каждое значение - это индекс (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

первая ссылка идет от 0 (строка 0 в nodes фрейм данных, который является узлом с именем «Сельскохозяйственные отходы») к 1 (строка 1 nodes фрейма данных, который является узлом с именем «Био-преобразование»)

Итак, для второго примера Вы могли бы достичь этого с ...

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)

enter image description here

...