2015-12-27 7 views
5

La domanda è specificare due colori diversi in base al valore o al peso del collegamento utilizzando networkD3::forceNetwork in R. Ad esempio, Blue per il peso di collega più di 1, dark per il peso dei link inferiore a 1.Specificare i colori per ciascun collegamento in una rete forzata, networkD3 :: forceNetwork()

codice di esempio, copiato da here (sezione forceNetwork):

library(networkD3) 
# Load data 
data(MisLinks) 
data(MisNodes) 

# Plot 
forceNetwork(Links = MisLinks, Nodes = MisNodes, 
     Source = "source", Target = "target", 
     Value = "value", NodeID = "name", 
     Group = "group", opacity = 0.8) 

a d3-JS domanda relativa è here (non so nulla su JS finora).

risposta

3

Ho appena avuto lo stesso problema a lavorare con networkD3.
Potete farlo, fornendo un vettore a seconda dei valori di MisLinks$value con la funzione ifelse:

forceNetwork(Links = MisLinks, Nodes = MisNodes, 
     Source = "source", Target = "target", 
     Value = "value", NodeID = "name", 
     Group = "group", opacity = 0.8, 
     linkColour = ifelse(MisLinks$value > 1, "blue","black")) 

Questa soluzione non dipende dal fatto javascript.
Spero che questo aiuti.

7

Penso che dovresti essere in grado di passare una funzione javascript nel JS a linkColour per ottenere colori basati sui valori in MisLink. Ad esempio, tornare link blu per i valori> 1 e rossi per i valori < = 1.

forceNetwork(Links = MisLinks, Nodes = MisNodes, 
      Source = "source", Target = "target", 
      Value = "value", NodeID = "name", 
      Group = "group", opacity = 0.8, 
      linkColour = JS('function(l) { return l.value > 1 ? "#00F" : "#F00" }')) 
+0

in questo esempio è possibile utilizzare un attributo diverso per il colore? quindi, usa 'valore' per la larghezza del bordo e' colocated' per colore? Ho provato a passare un attributo chiamato 'colocated' oltre a' source', 'target' e' value' e ho cambiato il codice in 'linkColour = JS ('function (l) {return l.colocated> 0?" # 00F " : "# F00"} ') '. Ottengo il seguente errore: 'impossibile forzare la classe" "JS_EVAL" "a un data.frame'. – ironv

+0

probabilmente una domanda correlata per cui si devono colorare i nodi con colori predefiniti: http://stackoverflow.com/questions/38793947/r-colouring-scheme-in-networkd3-vs-igraph?noredirect=1#comment65115769_38793947 –

+0

@ironv sembra che il parametro linkColour non supporti più JS, mentre ha funzionato bene prima. Tuttavia, la risposta di Joseah funziona. –