Как раскрасить группы в sankeyNetwork сети D3?

Мои узлы состоят из имен и групп, но я не могу реализовать отдельные цвета для групп в моей диаграмме Санки. Все цвета либо синие со значениями по умолчанию, либо все черные с использованием приведенного ниже кода.

Вот код, который я использую:

sankeyNetwork(        
Links = data$links,
Nodes = data$nodes,
Source= "source",
Target = "target",
Value = "weight",
NodeID = "names",
fontSize = 15,
NodeGroup = "group" 
))

Вот результат, который я получаю: введите описание изображения здесь

2 ответа

NodeGroup вектор в Nodes фрейм данных должен быть не числовым. Это не очевидно из документации. Поскольку вы не предоставили данные, с которыми работаете, мы не можем быть уверены, что это ваша проблема, но в примере, который сделал @john-friel, это проблема. Вот рабочий пример с единственным изменением в том, что group вектор приводится к символьному вектору...

library(networkD3)
source <- c(0,1,2,3,4,5)
target <- c(2,2,2,3,1,0)
value <- c(33,44,55,66,77,88)

sankeydata <- data.frame(source,target, value)

names <- c('a', 'b', 'c', 'd', 'e', 'f')
id <- c(0,1,2,3,4,5)
group <- as.character(c(1,1,1,2,2,2)) # this is the only line changed

sankeyNodes <- data.frame(names,id, group)


sankeyNetwork(Links = sankeydata, Nodes = sankeyNodes, Source = "source",
         Target = "target", Value = "value", NodeID = "names", 
         NodeGroup = "group", fontSize = 12, nodeWidth = 30)

library(networkD3)
source <- c(0,1,2,3,4,5)
target <- c(2,2,2,3,1,0)
value <- c(33,44,55,66,77,88)

sankeydata <- data.frame(source,target, value)

names <- c('a', 'b', 'c', 'd', 'e', 'f')
id <- c(0,1,2,3,4,5)
group <- c(1,1,1,2,2,2)

sankeyNodes <- data.frame(names,id, group)


sankeyNetwork(Links = sankeydata, Nodes = sankeyNodes, Source = "source",
         Target = "target", Value = "value", NodeID = "names", NodeGroup = "group", fontSize = 12, nodeWidth = 30)

Я ожидал бы двух цветов (так как есть две группы), но никакие цвета не возвращаются. У меня та же проблема, что и у OP.

Текст справки предполагает, что за цвет отвечает NodeGroup.

Если вы запустите аналогичный код для другого графика в библиотеке (networkD3):

#same data
forceNetwork(Links = sankeydata, Nodes = sankeyNodes , Source = "source",
         Target = "target", Value = "value", NodeID = "names",
         Group = "group", opacity = 0.8, zoom = TRUE)

Графики двух разных цветов в сетевом графике.

Другие вопросы по тегам