R、igraph:有序布局

R, igraph: ordered layout

g成为一个igraph对象。例如,g <- make_graph(~A-C-B, C-D, E-D-F)。让我们设置一个名为 level

的顶点属性
V(g)[c("A", "B")]$level <- 1
V(g)[c("C")]$level <- 2
V(g)[c("D")]$level <- 3
V(g)[c("E", "F")]$level <- 4

igraph 中是否有任何工具可以为 g 构建布局,使其尊重 level,即始终放置 level 较少的顶点向左且具有相同级别的顶点具有相同(或接近)的横坐标。

因此,对于给定的图表,我希望看到这样的图片:

由于 igraph 中的布局只是一个 {x,y} 坐标矩阵,您可以将 x 坐标设置为等于您的级别。

g <- make_graph(~A-C-B, C-D, E-D-F)
V(g)$level <- c(1,2,1,3,4,4)
l <- matrix(c(V(g)$level,1,2,3,2,3,1),nrow=length(V(g)$level),ncol=2)
plot(g, layout=l)

我只是手工绘制了 y 轴,但您可以根据需要构建它。


使用 Sugiyama 布局

杉山布局通过添加层来工作。布局有很多选项,但基本上,它会尝试创建图形的分层表示。

l <- layout_with_sugiyama(g, layers = -V(g)$level)$layout
#note the "-", this ensures that the smaller level values get small x coordinates

plot(g,layout=l[,c(2,1)])