Home > Software design >  Hide vertices from plot.igraph conditional on vertex attribute without deleting them
Hide vertices from plot.igraph conditional on vertex attribute without deleting them

Time:12-03

I have an igraph plot that is geographically laid out based on its latitude and longitude coordinates. I now want to hide certain points from one time period, while preserving the layout of the graph. I would therefore not like to delete the vertices from the network, but merely make them invisible in this particular plot rendering, conditional on a vertex attribute. Furthermore, the color attribute is already set to capture another variable, so I cannot use that to hide the points.

My plot is generated according to the following code:

lo <- layout.norm(as.matrix(g[, c("longitude","latitude")]))
plot.igraph(g, layout=lo, vertex.label=NA,rescale=T, vertex.size = 4)

The time attribute is a numerical variable stored in V(g)$period

Is there code I can put within the plot.igraph function to hide vertices for which V(g)$period == 1?

CodePudding user response:

You can store the coordinates in the x and y vertex attributes. Then they will be used by plot automatically, and they will be preserved when you delete vertices.

For example:

g<-make_ring(4)
V(g)$x <- c(0,0,1,1)
V(g)$y <- c(0,1,0,1)
plot(g)

enter image description here

plot(delete_vertices(g,1))

enter image description here

CodePudding user response:

Update. Building upon Szabolcs's answer.

library(igraph)
## reproducible example
g         <- make_graph("Zachary")
V(g)$name <- V(g)
set.seed(10)
lyt       <- layout_with_drl(g)
V(g)$x    <- lyt[,1]
V(g)$y    <- lyt[,2]
plot(g)
dev.new(); plot(g - c(4, 8, 9, 19, 24, 33) )

Try invisible inkt, e.g. print hidden objects in background color. Or try this.

library(igraph)
## reproducible example.
g         <- make_graph("Zachary")
V(g)$name <- V(g)
set.seed(10)
lyt       <- layout_with_drl(g)
plot(g, layout=lyt)

## delete vertices and preserve layout.
del_vs    <- c(9, 19, 24, 33)
g2        <- g - del_vs
g2$main   <-  paste("Zachary minus", toString(del_vs))
g2$layout <- matrix(lyt[-del_vs,], ncol=2)
dev.new(); plot(g2)

See also:

Looking to save coordinates/layout to make temporal networks in Igraph with DRL .

  • Related