私は本当にこのネットワークがどのように見えるかのように:R networkD3パッケージ:forceNetwork()着色
出典:https://christophergandrud.github.io/networkD3/
各色は、いくつかの異なる部分を表し、各部門のための複数の色があります。ネットワーク内のノードの数は、他のノードから十分に離れています。
しかし、いずれの特定のセクターでも、ノードがtarget
ノードとどのように同じ色になっているのが好きではないので、2色の区別方法について質問しました(https://stackoverflow.com/a/35371131/3878253)。
ここでは、このコードを拡張して複数のカラースキームを戻してもいいですが(色々なセクタを区別するために)、まだ違いはありません。src
/target
色の違いはありますか?
# 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")
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))
あなたが述べたように、この解決策は、手動で 'nodes'データフレームの' group'列の値を設定する必要があります。しかし、私は、このプロセスを自動化する方法があるかどうかを尋ねています。これは、ソースコードがネットワークのさまざまなセクターの色付けを自動的に行います。大規模なネットワークでは、これは大きなプラスになります(つまり、非常に素晴らしくスケーラビリティがあります)。私はあなたの答えが好きです、それは最初の場所で着色の概念がどこから来るかを示しています。 – warship
ノードのデータフレームを前処理して、任意の方法でグループ値を設定できます。特定のユースケースを指定した場合、その作業を手伝うことができますが、詳細を知らなくても無限に近い可能性があります。 –