在igraph中执行聚类算法时修复多个节点坐标

时间:2012-08-26 10:20:06

标签: r igraph

想知道以下是否可行:

目前,我在图表中有一个节点子集(图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), ...)

2 个答案:

答案 0 :(得分:2)

您可以使用minxmaxx的{​​{1}},minymaxylayout.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并设置绘图限制。)

enter image description here

答案 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,])