如何在 igraph (R) 中制作同心圆布局
how to make concentric circles layout in igraph (R)
我正在尝试创建一个特殊的图形布局,其中将 2 种不同类型的节点(基于它们的属性)放置在 2 个不同半径的不同圆上(同心圆布局)。
这是一个玩具示例,其中具有 10 个节点的图形具有属性(大小)。目标是将尺寸小于5的节点放在内圈,尺寸大于5的节点放在外圈:
g <- make_full_graph(10)
V(g)$size = V(g)
我找不到 igraph 库支持的任何此类布局。有谁知道如何做到这一点?
如果您只想要一个圆圈,可以使用 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))
试图使边缘漂亮并没有做任何特别的事情。但我想重点是你可以通过返回坐标矩阵来定义你想要控制布局的任何函数。
我正在尝试创建一个特殊的图形布局,其中将 2 种不同类型的节点(基于它们的属性)放置在 2 个不同半径的不同圆上(同心圆布局)。
这是一个玩具示例,其中具有 10 个节点的图形具有属性(大小)。目标是将尺寸小于5的节点放在内圈,尺寸大于5的节点放在外圈:
g <- make_full_graph(10)
V(g)$size = V(g)
我找不到 igraph 库支持的任何此类布局。有谁知道如何做到这一点?
如果您只想要一个圆圈,可以使用 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))
试图使边缘漂亮并没有做任何特别的事情。但我想重点是你可以通过返回坐标矩阵来定义你想要控制布局的任何函数。