ここforceNetwork
でノードの色を制御する方法を説明します。いくつかのノードがいくつかのリンクのソースであり、他のノードのターゲットであるため、これはリンクの方向を教えてくれないことに注意してください。そうすれば、そのロジックを何とか考え直す必要があります。しかし、とにかく、ここではノードの色を制御しています。上記
# Load package
library(networkD3)
library(dplyr) # to make the joins easier
# Create fake data
src <- c("A", "A", "A", "A",
"B", "B", "C", "C", "D")
target <- c("B", "C", "D", "J",
"E", "F", "G", "H", "I")
networkData <- data.frame(src, target, stringsAsFactors = FALSE)
nodes <- data.frame(name = unique(c(src, target)), stringsAsFactors = FALSE)
nodes$id <- 0:(nrow(nodes) - 1)
# create a data frame of the edges that uses id 0:9 instead of their names
edges <- networkData %>%
left_join(nodes, by = c("src" = "name")) %>%
select(-src) %>%
rename(source = id) %>%
left_join(nodes, by = c("target" = "name")) %>%
select(-target) %>%
rename(target = id)
edges$width <- 1
# make a grouping variable that will match to colours
nodes$group <- ifelse(nodes$name %in% src, "lions", "tigers")
# simple with default colours
forceNetwork(Links = edges, Nodes = nodes,
Source = "source",
Target = "target",
NodeID ="name",
Group = "group",
Value = "width",
opacity = 0.9,
zoom = TRUE)
# control colours with a JS ordinal scale
# edited 20 May 2017 with updated code from Renal Chesak's answer:
ColourScale <- 'd3.scaleOrdinal()
.domain(["lions", "tigers"])
.range(["#FF6900", "#694489"]);'
forceNetwork(Links = edges, Nodes = nodes,
Source = "source",
Target = "target",
NodeID ="name",
Group = "group",
Value = "width",
opacity = 0.9,
zoom = TRUE,
colourScale = JS(ColourScale))

はそれをです...私見はもう少し簡潔で理解しやすい別のアプローチであり、同じパッケージ内で 'forceNetwork()'を使っても構いませんか?グループとJavaScriptスケールで色をコントロールできます。あなたが熱心であれば、私は完全な答えをすることができます。 –
@PeterEllisはい、それは非常に役に立つでしょう。 – warship
おそらく関連する質問は、あらかじめ指定された色でノードを色付けする必要があります:http://stackoverflow.com/questions/38793947/r-colouring-scheme-in-networkd3-vs-igraph?noredirect=1#comment65115769_38793947 –