想知道以下是否可行:
目前,我在图表中有一个节点子集(图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), ...)
答案 0 :(得分:2)
您可以使用minx
或maxx
的{{1}},miny
,maxy
和layout.fruchterman.reingold()
参数来完全修复某些顶点。这些参数指定坐标的特定于顶点的下限和/或上限。
对于要修复的顶点,将其精确设置为要修复的值,对于其他顶点,将layout.kamada.kawai()
设置为一些小的负值(minx
也可能有效),并设置-Inf
有一些很大的价值,(同样,也许maxx
也可以。)
您可能需要使用Inf
中的rescale=FALSE
参数来避免重新缩放第一个和第二个图表的完整布局。
从手册:
'
plot.igraph()
'如果不是'minx
',那么它必须是一个给出的数字向量 顶点的“NULL
”坐标的下边界。该 向量的长度必须与中的顶点数相匹配 曲线图。'
x
'与'maxx
'类似,但给出了上限。
例如:
minx
将第一个顶点修复为(0,0)(可能会通过重新缩放修改,以避免重新缩放,在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)
中使用rescale=FALSE
并设置绘图限制。)
答案 1 :(得分:0)
igraph中的布局被定义为n(节点数)乘以2矩阵,其中第一列表示x坐标(在任意比例上),第二列表示y坐标。您可以存储任何这些函数的结果来获取此矩阵,然后在绘制另一个图形时将其传递给layout
参数。
library("igraph")
# A 3-node network:
g <- graph.adjacency(matrix(1,3,3))
# Obtain a layout:
l <- layout.circle(g)
# A different 3-node network:
g2 <- graph.adjacency(matrix(0,3,3))
# Plot second network with layout based on first network:
plot(g2,layout=l)
如果你有一个图的子集,你可以简单地索引这个矩阵。 E.g:
# A 3-node network:
g <- graph.adjacency(matrix(1,3,3))
# Obtain a layout:
l <- layout.circle(g)
# A 2-node subset:
g2 <- graph.adjacency(matrix(1,2,2))
# Plot second network with layout based on first network:
plot(g2,layout=l[1:2,])