Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

igraph: Remove vertices from layout

Tags:

r

igraph

vertices

I want to create a visualization of a graph at 4 steps, i.e. different points in time. The positions of my vertices (nodes) should always stay the same (use the positions of the full graph). All I want is to remove some vertices from the R igraph graph. What seems to be an issue is that the vertices names change.

# Erdos
par(mfrow=c(1,3))
g <- erdos.renyi.game(20, 1/20)
locs <- layout.fruchterman.reingold(g)
V(g)$name <- V(g)
# In the original file, vector names look like this (not "1,2,3,4...):
V(g)$name <- as.vector(c(8,9,3,5,13,6,7,1,2,18,11,12,16,14,15,4,17,10,20,19))
V(g)$name

plot(g, 
     layout=locs, 
     main="Original")

# Remove a few vertices
removals1 <- c("12","2","9","11","4")
g2 <- delete.vertices(g,removals1)
plot(g2, 
     layout=locs[-as.numeric(removals1),], 
     main="Removals")

# Remove some more
removals2 <- c("15","14","7","8","5","19","10")
g3 <- delete.vertices(g2,removals2)
plot(g3, 
     layout=locs[-as.numeric(c(removals1,removals2)),], 
     main="More Removals")

I would be really happy to find a solution here. Maybe, there are also far more elegant solution as the one above. Thanks!

like image 731
Rnaldinho Avatar asked Jun 06 '26 01:06

Rnaldinho


1 Answers

Instead of using the delete which was somehow moving the vertices around (I couldn't even completly overlay the graph, labels not withstanding), it is better to use induced_subgraph. I do not why this is the case but it seems to work.

# Erdos
g <- erdos.renyi.game(20, 1/20)
locs <- layout.fruchterman.reingold(g)
V(g)$name <- V(g)
# In the original file, vector names look like this (not "1,2,3,4...):
V(g)$name <- as.vector(c(8,9,3,5,13,6,7,1,2,18,11,12,16,14,15,4,17,10,20,19))
V(g)$name

par(mfrow=c(1,3))
plot(g, 
     layout=locs, 
     main="Original")

# Remove a few vertices
removals1 <- c("12","2","9","11","4")
g2 <- induced_subgraph(g, V(g)[-as.numeric(removals1)])
plot(g2, 
     layout=locs[-as.numeric(removals1),], 
     main="Removals")

# Remove some more
removals2 <- c("15","14","7","8","5","19","10")
g3 <- induced_subgraph(g, V(g)[-as.numeric(c(removals1, removals2))])
plot(g3, 
     layout=locs[-as.numeric(c(removals1,removals2)),], 
     main="More Removals")

enter image description here

like image 81
emilliman5 Avatar answered Jun 07 '26 23:06

emilliman5



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!