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)])
让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)])