简体   繁体   中英

how to make concentric circles layout in igraph (R)

I'm trying to create a special graph layout where 2 different types of nodes (based on their attribute) are placed on 2 different circles with different radius (concentric circles layout).

Here's a toy example where a graph with 10 nodes have an attribute (size). The goal is to place the nodes with size less than 5 on an inner circle, and the nodes with size greater than 5 on an outer circle:

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

I couldn't find any such layout supported by igraph library. Does anyone know how to achieve this?

There is the layout_in_circle option if you only wanted one circle. You could apply that separately to each of your groups with something like this

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
}

Then you could plot with

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

It doesn't do anything special to try to make the edges pretty. But I guess the point is you can define whatever function you want to control the layout by returning a matrix of coordinates.

在此处输入图片说明

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM