2016-08-05 14 views
1

У меня есть сеть, где я охарактеризовал каждого из узлов с предыдущим analysis- и назначил цвета следующим образом:схема раскраски в networkD3 против igraph

plot.igraph(g, layout=layout.fruchterman.reingold(g), vertex.color=node_colors, vertex.label = node_names) 

переменной «node_colors» является вектором, который был сделанные из предыдущего анализа, чтобы цвета совпадали с размещением/кластеризацией вершин.

enter image description here

Однако, когда я пытаюсь реализовать персональную цветовую схему в networkD3, я получаю сообщение об ошибке 'неиспользованный аргумент':

data<-igraph_to_networkD3(g, group = members) 
forceNetwork(Links = data$links, Nodes = data$nodes, Source = 'source', Target = 'target', NodeID = 'value', Nodesize = 'size', Group = "group", colourScale=node_colors, zoom = T, legend = T, opacityNoHover = TRUE) 

Ошибка: Предупреждение: Ошибка в forceNetwork: неиспользуемого аргумента (colorScale = node_colors)

NetworkD3, похоже, просто создает собственную схему раскраски ... поэтому, когда я опускаю аргумент: 'colorScale = node_colors', я получаю следующее:

enter image description here

Но как вы можете видеть цвета, не синхронизируются с тем из igraph участка.

Кто-нибудь знает, как создать персональную цветовую схему (вектор, содержащий ряд цветов) в networkD3

+0

Возможный дубликат [этот вопрос] (http://stackoverflow.com/questions/ 35280218/г-networkd3-пакет-узел окраска-в-simplenetwork) –

ответ

3

Вы можете передать Javascript код через с функцией JS(), которая поставляется с пакетом networkD3. В Javascript вы можете использовать шестнадцатеричный код для указания цветов. Вот пример:

YourColors <- 'd3.scaleOrdinal().range([ "#FFA500", "#4169E1", "#32CD32", 
             "#FFC0CB", "#8A2BE2", "#FF6347"]);' 

forceNetwork(Links = data$links, Nodes = data$nodes, 
      Source = 'source', Target = 'target', 
      NodeID = 'value', Nodesize = 'size', Group = "group", 
      ######################### 
      colourScale = JS(YourColors), 
      ######################### 
      zoom = T, legend = T, opacityNoHover = TRUE) 

Если вы хотите, чтобы связать определенные цвета для конкретных переменных, вы можете использовать

YourColors <- 'd3.scaleOrdinal() 
        .domain(["variable1", "variable2", "variable3"]) 
        .range(["#7FFF00", "#A52A2A", "#E6E6FA"])'