想知道以下情况是否可能:

目前,我在图(图A)中有一个节点子集,它属于另一个单独的较大图(图B)。

在图A上运行布局生成算法时,我想保留与图B相关的节点子集的布局。可以是任何布局算法。

 layout.circle(graph, params)
 layout.sphere(graph, params)
 layout.fruchterman.reingold(graph, ..., dim=2, params)
 layout.kamada.kawai(graph, ..., dim=2, params)
 layout.spring(graph, ..., params)
 layout.reingold.tilford(graph, ..., params)
 layout.fruchterman.reingold.grid(graph, ..., params)
 layout.lgl(graph, ..., params)
 layout.graphopt(graph, ..., params=list())
 layout.mds(graph, dist=NULL, dim=2, options=igraph.arpack.default)
 layout.svd(graph, d=shortest.paths(graph), ...)

最佳答案

您可以使用minxmaxxminymaxylayout.fruchterman.reingold()layout.kamada.kawai()自变量完全修复某些顶点。这些参数指定坐标的特定于顶点的下限和/或上限。

对于要修复的顶点,将它们精确设置为要修复的值,对于其他顶点,将minx设置为一些小的负值(-Inf也可以使用),然后将maxx设置为一些大值,(再次,也许Inf也可以)。

您可能需要在rescale=FALSE中使用plot.igraph()参数,以避免对第一张图和第二张图重新缩放整个布局。

编辑:

从手册中:


'minx'如果不是'NULL',则它必须是给出
顶点的“ x”坐标的下边界。的
向量的长度必须与
图形。

'maxx'与'minx'类似,但给出了上限。


例如:

g <- graph.star(10, center=1)

minx <- rep(-Inf, vcount(g))
maxx <- rep( Inf, vcount(g))
minx[1] <- 0
maxx[1] <- 0
lay <- layout.fruchterman.reingold(g, minx=minx, maxx=maxx, miny=minx, maxy=maxx)

plot(g, layout=lay)


将第一个顶点固定为(0,0)(可能需要通过重新缩放来修改,为避免重新缩放,请在rescale=FALSE中使用plot()并设置绘图限制)。

08-24 18:47