2017-03-03 1 views
2

Das NetzwerkD3-Paket enthält einige sehr nette Funktionen zum Erstellen der offensichtlichen Netzwerke. Verschiedene Funktionen haben unterschiedliche Argumente. Diese Fragen beziehen sich speziell auf die Funktion radialNetwork(). Ist es möglich, dass sich die Farbe des Knotenzugs entsprechend einem gegebenen Vektor ändert?R NetzwerkD3 Farbe Knoten Strich für radialNetwork()

Der folgende Code erstellt das Netzwerkdiagramm, aber das Ändern des Arguments für den Knoten Strich zu einem Vektor mit verschiedenen Farben funktioniert nicht.

library(networkD3) 
library(tidyverse) 
library(data.tree) 

## Data 
input <- list(number=50) 
Data_tree <- data.frame(Start="Class", 
         Asset = sample(c("FI","Equity","Currency","Commodities"),input$number,replace = TRUE), 
         Sub_Asset = sample(c("Asia","Europe","USA","Africa","ME"),input$number,replace = TRUE), 
         Ticker = replicate(input$number,paste0(sample(LETTERS,3),collapse=""))) %>% 
unite(col="pathString",Start,Asset,Sub_Asset,Ticker,sep="-",remove=FALSE) %>% 
select(-Start) %>% as.Node(pathDelimiter = "-") 



radialNetwork(ToListExplicit(Data_tree, unname = TRUE), 
      linkColour = "#ccc", 
      nodeColour = "#fff", 
      nodeStroke = "orange", 
      textColour = "#cccccc") 

enter image description here

Antwort

3

Nicht direkt ... networkD3 nicht unterstützt diese Fähigkeit. Sie können jedoch auch eigenes JavaScript in dieses Attribut einfügen.

Zum Beispiel, wenn Sie einen Vektor von Farbnamen in der richtigen Reihenfolge haben, könnten Sie, dass zu einem JavaScript-Array (in Form konvertieren: ["red", "blue", "green"]) und verwenden Sie die JS Funktion aus dem htmlwidget Paket eine Funktion zu bauen passieren das Argument nodeStroke

colorVector <- c("black", "red", "blue", "green", "orange", 
    rep("red", 5), rep("blue", 5), rep("green", 4), rep("orange", 4), 
    rep("red", 11), rep("blue", 14), rep("green", 14), rep("orange", 11)) 

jsarray <- paste0('["', paste(colorVector, collapse = '", "'), '"]') 
nodeStrokeJS <- JS(paste0('function(d, i) { return ', jsarray, '[i]; }')) 

radialNetwork(ToListExplicit(Data_tree, unname = TRUE), 
    linkColour = "#ccc", 
    nodeColour = "#fff", 
    nodeStroke = nodeStrokeJS, 
    textColour = "#cccccc") 
+0

Danke! Funktioniert wie ein Charme –

Verwandte Themen