【发布时间】:2022-08-15 04:53:14
【问题描述】:
我试图对我的节点图使用 forceNetwork() 函数。但是,我似乎无法设置链接距离。例如,在附图中,我想将所有绿色节点设置为与中心等距。目前,它们似乎距离更远,具体取决于连接到它们的粉红色节点的数量。我遵循了here 的建议,但无法让它工作。
这是我的代码(对不起摇摇欲坠的代码块):
library(networkD3)
library(htmlwidgets)
NUM_PNODES <- 100
NUM_DNODES <- 8
LINKDIST1 <- 1
LINKDIST2 <- 5
N_SIZE1 <- 2
### Parent edges and nodes
nodes.ID <- (1:NUM_PNODES)-1
nodes <- paste0(\'p\',1:NUM_PNODES)
source1 <- rep(nodes[1],max(nodes.ID))
target1 <- nodes[-1]
source_idx1 <- nodes.ID[1]
target_idx1 <- nodes.ID[-1]
linkdist1 <- LINKDIST1
links.df <- data.frame(source1,target1,source_idx1,target_idx1,linkdist1)
type <- rep(\'parent\',NUM_PNODES)
group <- 0
nodesize <- N_SIZE1
node.df <- data.frame(nodes,group,type,nodesize)
source1 <- target1 <- source_idx1 <- target_idx1 <- linkdist1 <- tdat <- c()
for(i in 1:NUM_DNODES){
if(i==1){
NCOUNT <- max(links.df$target_idx1) + 1
}
### clone edges and nodes
source1 <- \'p1\'
target1 <- paste0(\'d\',i)
source_idx1 <- 0
target_idx1 <- NCOUNT
linkdist1 <- LINKDIST2
tdat <- data.frame(source1,target1,source_idx1,target_idx1,linkdist1)
ndat <- data.frame(target1,i,\'clone\',N_SIZE1)
colnames(ndat) <- c(\'nodes\',\'group\',\'type\',\'nodesize\')
links.df <- rbind(links.df,tdat)
node.df <- rbind(node.df,ndat)
### Daughter edges and nodes
source1 <- rep(paste0(\'d\',i),i)
target1 <- paste0(\'d\',i,\'.\',1:i)
source_idx1 <- rep(NCOUNT,i)
target_idx1 <- (NCOUNT+1):(NCOUNT+i)
NCOUNT <- NCOUNT+i+1
linkdist1 <- LINKDIST1
tdat <- data.frame(source1,target1,source_idx1,target_idx1,linkdist1)
ndat <- data.frame(target1,i,\'daughter\',N_SIZE1)
colnames(ndat) <- c(\'nodes\',\'group\',\'type\',\'nodesize\')
links.df <- rbind(links.df,tdat)
node.df <- rbind(node.df,ndat)
}
ColourScale <- \'d3.scaleOrdinal()
.domain([\"parent\", \"clone\", \"daughter\"])
.range([\"blue\", \"green\", \"red\"]);\'
fn <- forceNetwork(Links = links.df, Nodes = node.df,
Source = \'source_idx1\', Target = \'target_idx1\',
NodeID = \'nodes\', Group = \'type\',
bounded = TRUE, opacityNoHover = TRUE, zoom = TRUE,
colourScale = JS(ColourScale),
linkDistance=JS(\'function(d) {\', \'return d.linkdist1;\', \'}\'))
fn$x$links$linkdist1 <- links.df$linkdist1
fn
谢谢你的帮助!
标签: javascript r htmlwidgets networkd3