ограничить каждый узел в сети, созданной с помощью networkD3 :: forceNetwork (), указанным цветом c - PullRequest
0 голосов
/ 17 февраля 2020

Рассмотрим следующую сеть, можно ли узлы граничить с цветами на основе столбца из фрейма данных MisNodes с использованием функции 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)

1 Ответ

1 голос
/ 21 февраля 2020

Предполагая, что во фрейме данных вашего узла есть столбец с допустимыми значениями цвета, вы можете добавить пользовательский JavaScript для установки цветов границы узла с ним ...

library(networkD3)
library(htmlwidgets)

# Load data
data(MisLinks)
data(MisNodes)

MisNodes$border <- c(rep("#F00", 20), rep("#0F0", 20), rep("#00F", 20), rep("#F00", 17))


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


# add the color column back in to the data in the htmlwidget because
# forceNetwork only passes through the necessary columns
fn$x$nodes$border <- MisNodes$border


# add custom JavaScript to set the node stroke to the color in the border column
fn <- htmlwidgets::onRender(fn, 
  'function(el, x) { d3.selectAll("circle").style("stroke", d => d.border); }')


# display
fn

enter image description here

...