networkD3包(请参阅这里和这里)允许用户创建简单的交互式网络:
# Load package
library(networkD3)
# 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)
# Plot
simpleNetwork(networkData)是否有一种方法可以指定src向量中的所有元素都是特定的颜色,同时允许target向量中的所有元素都是不同的颜色?这将使我能够直观地区分网络中的src节点和target节点。
这个功能目前在simpleNetwork()中似乎不受支持(但我希望有人能帮助我编写一个自制脚本):

一个类似但不相关的问题是问这里。
发布于 2016-02-12 19:55:20
下面是如何用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))

发布于 2017-04-14 14:55:42
Peter上面的答案可能曾经起过作用,但是看起来代码已经在一个新版本中被更新了。而不是d3.scale.ordinal().range([]),您将不得不使用d3.scaleOrdinal().range([])
发布于 2016-02-09 03:07:58
您可以在链接post中执行类似的操作,但是下面是一个使用visNetwork包的示例。这个包与vis.js接口,并制作了非常好的交互式图形。
library(visNetwork)
id <- unique(c(src, target)) # node ids
nodes <- data.frame(id, group=+(id %in% src), # add a grouping for src/target
label=id, title=sprintf('<p>Node %s</p>', id)) # add some labels
g <- visNetwork(nodes=nodes, edges=networkData, width="75%") # make graph
visExport(visHierarchicalLayout(g)) # make it tree-like

https://stackoverflow.com/questions/35280218
复制相似问题