从图表对象

时间:2016-11-19 21:57:34

标签: r igraph

这是一个简单的问题,但我似乎无法找到它的文档。我有一个图形对象,它是通过两个图形的并集创建的。我想输出在合并期间创建的布局功能。

a <- barabasi.game(10)
b <- barabasi.game(20)

ab <- union(a,b)

理想情况下,我希望以一种将子图(a,b)放在他们自己的空间中的方式来想象联合。&#34; igraph中是否有默认函数用于输出图形对象的布局?

1 个答案:

答案 0 :(得分:2)

对于igraph,布局是坐标矩阵。如果你调用任何布局方法,你会得到一个矩阵:

        var docs = new LinkedList<HtmlDocument>();
        int tlimit = 20;
        var tasks = new Task<HtmlDocument>[tlimit];
        for(int i = 0; i < tlimit; ++i)
        {
            tasks[i] = Task<HtmlDocument>.Factory.StartNew(() => BoardScanner.GetBoardPage(i));
        }
       /// ???

如果将这些矩阵分配给loa <- layout.fruchterman.reingold(a) lob <- layout.fruchterman.reingold(a) 图形属性,igraph将在绘图时自动使用它们,或者您可以直接将它们传递给绘图方法:

layout

如果您使用两个图形的并集,则它们的布局属性(如果有)不会合并,而是重命名为b$layout <- loa plot(a) plot(b, layout = lob) layout_1。如果你想保持非重叠部分分开,并合并布局,我有这个想法:

layout_2

这里我创建了两个布局,一个是西边缩放,另一个是坐标系统的东半边。然后我合并了布局,默认情况下是a <- barabasi.game(10) b <- barabasi.game(20) a$layout <- layout.norm(layout_with_fr(a), -1, 0, -1, 1) # each subgraph b$layout <- layout.norm(layout_with_fr(b), 0, 1, -1, 1) # in their own space V(a)$x <- a$layout[,1] V(a)$y <- a$layout[,2] V(b)$x <- b$layout[,1] V(b)$y <- b$layout[,2] V(a)$color <- 'blue' ab <- union(a, b) V(ab)$x <- vapply(seq(vcount(ab)), function(vid){ ifelse(is.na(V(ab)$x_1[vid]), V(ab)$x_2[vid], V(ab)$x_1[vid]) }, 0.0) V(ab)$y <- vapply(seq(vcount(ab)), function(vid){ ifelse(is.na(V(ab)$y_1[vid]), V(ab)$y_2[vid], V(ab)$y_1[vid]) }, 0.0) ab$layout <- cbind(V(ab)$x, V(ab)$y) V(ab)$color[is.na(V(ab)$color)] <- 'yellow' plot(ab, rescale = FALSE) 的坐标,如果顶点不是a的一部分则来自b。在从bx坐标创建新的布局矩阵后,我使用y绘制了图表,因此坐标保持不变。

注意:您可能希望合并图形而不是基于数字顶点ID,而是按名称合并。为此,请创建rescale = FALSE顶点属性,并将name参数传递给byname = TRUE方法。