跳到内容

使用Fruchterman和Reingold的力导向布局算法在平面上放置顶点。

用法

layout_with_fr(
  graph,
  coords = NULL,
  dim = c(2, 3),
  niter = 500,
  start.temp = sqrt(vcount(graph)),
  grid = c("auto", "grid", "nogrid"),
  weights = NULL,
  minx = NULL,
  maxx = NULL,
  miny = NULL,
  maxy = NULL,
  minz = NULL,
  maxz = NULL,
  coolexp = deprecated(),
  maxdelta = deprecated(),
  area = deprecated(),
  repulserad = deprecated(),
  maxiter = deprecated()
)

with_fr(...)

参数

graph

要布局的图。边的方向被忽略。

坐标

顶点的可选起始位置。如果此参数不是NULL,则它应是一个适当的起始坐标矩阵。

dim

整数标量,2或3,布局的维度。二维布局放置在平面上,三维布局放置在3d空间中。

niter

整数标量,要执行的迭代次数。

start.temp

实数标量,起始温度。这是在一个步骤中,一个顶点沿一个轴允许的最大移动量。目前,它在迭代过程中线性减小到零。

grid

字符标量,是否使用更快但不太准确的基于网格的算法实现。默认情况下(“auto”),如果图具有超过一千个顶点,则使用基于网格的实现。

weights

一个给出边权重的向量。如果存在,默认情况下使用weight边属性。如果给出了权重,则沿边的吸引力将乘以给定的边权重。这使得连接到高度加权边的顶点彼此更靠近。权重必须为正数。

minx

如果不是NULL,则它必须是一个数值向量,给出顶点“x”坐标的下限。向量的长度必须与图中顶点的数量匹配。

maxx

类似于minx,但给出上限。

miny

类似于minx,但给出“y”坐标的下限。

maxy

类似于minx,但给出“y”坐标的上限。

minz

类似于minx,但给出“z”坐标的下限。

maxz

类似于minx,但给出“z”坐标的上限。

coolexp, maxdelta, area, repulserad

[已弃用] 从igraph版本0.8.0开始不支持这些参数,并且会被忽略(带有警告)。

maxiter

为了兼容性,niter的一个已弃用的同义词。

...

传递给layout_with_fr()

一个两列或三列的矩阵,每一行根据顶点id给出顶点的坐标。

详细信息

有关该算法的详细信息,请参见引用的论文。

此函数在igraph版本0.8.0中被完全重写。

参考文献

Fruchterman, T.M.J. and Reingold, E.M. (1991). Graph Drawing by Force-directed Placement. Software - Practice and Experience, 21(11):1129-1164.

作者

Gabor Csardi csardi.gabor@gmail.com

示例


# Fixing ego
g <- sample_pa(20, m = 2)
minC <- rep(-Inf, vcount(g))
maxC <- rep(Inf, vcount(g))
minC[1] <- maxC[1] <- 0
co <- layout_with_fr(g,
  minx = minC, maxx = maxC,
  miny = minC, maxy = maxC
)
co[1, ]
#> [1] 0 0
plot(g,
  layout = co, vertex.size = 30, edge.arrow.size = 0.2,
  vertex.label = c("ego", rep("", vcount(g) - 1)), rescale = FALSE,
  xlim = range(co[, 1]), ylim = range(co[, 2]), vertex.label.dist = 0,
  vertex.label.color = "red"
)
axis(1)
axis(2)