如何在igraph(R)中制作同心圆布局

时间:2017-03-23 18:38:19

标签: r igraph

我试图创建一个特殊的图形布局,其中2种不同类型的节点(基于它们的属性)放置在具有不同半径的两个不同圆上(同心圆布局)。

这是一个玩具示例,其中包含10个节点的图表具有属性(大小)。目标是在内圆上放置大小小于5的节点,在外圆上放置大小大于5的节点:

g <- make_full_graph(10)
V(g)$size = V(g)

我无法找到igraph库支持的任何此类布局。有谁知道如何实现这个目标?

1 个答案:

答案 0 :(得分:0)

如果您只想要一个圆圈,则有layout_in_circle选项。您可以将此单独应用于您的每个群组

layout_in_circles <- function(g, group=1) {
    layout <- lapply(split(V(g), group), function(x) {
        layout_in_circle(induced_subgraph(g,x))
    })
    layout <- Map(`*`, layout, seq_along(layout))
    x <- matrix(0, nrow=vcount(g), ncol=2)
    split(x, group) <- layout
    x
}

然后你可以用

绘图
plot(g, layout=layout_in_circles(g, group=V(g)>5))

尝试使边缘漂亮没有什么特别之处。但我想重点是你可以通过返回一个坐标矩阵来定义你想要控制布局的任何函数。

enter image description here