3
votes

How can I plot a selection of igraph nodes?

I have an existing graph, but it is too complex. I want to be able to 'zoom in' on a subset of the nodes.

I am able to delete a subset of edges, but I can't figure out how to 'turn off' the isolated nodes.

When using the network package, the displayisolates=FALSE parameter does this; it does not display these isolated nodes.

The layout algorithm should also ignore the 'turned off' edges.

For example:

g1 <- graph( c( 0,1, 1,2, 2,2, 2,3 ) )
g2 <- delete.edges(g1, E(g1, c(0,1)))
plot(g2)

When plotting g2, I want to not display node 0.

Thanks

3
Could you provide some data, or a graphical example of what you're trying to do?Brandon Bertelsen
Oh heck, I don't know the etiquette here, but I answered my own question. You just DELETE THE vertices. In the example above, you would g3 <- delete.vertices(g2, 0)Dennis

3 Answers

7
votes

I understand that users should not submit new answers to comment on other answers, but my edit was rejected and I don't have a high enough reputation to leave comments.

I just wanted to point out that in Wine's answer above, the "- 1" index correction in the deletes.isolates function is not necessary from igraph 0.6 onwards. See also Tamas' comment here:

Plot only Edges with a specific weight - igraph

4
votes

Hey, it looks like you figured it out, but in exploring the question (I usually use the network package myself, but have tried to use igraph as well for some things) I came up with a function that should do that automatically, mirroring the displayisolates = F functinality.

delete.isolates <- function(graph, mode = 'all') {
  isolates <- which(degree(graph, mode = mode) == 0) - 1
  delete.vertices(graph, isolates)
}

In your case, running this with g1 would remove the first vertex if you used the argument mode = 'in' and the last vertex if you used the argument mode = 'out'.

So in your case, if you entered:

g2 <- delete.isolates(g1, mode = 'in')
plot(g2)

You should get what you want. I don't use igraph much, so it's very possible that this function would run into some issues for other graphs.

P.S. This also gives the kind of weird result that in the new g2, the first vertex is now an isolate based on indegree. This function probably isn't useful in most situations, but might be helpful for making a cleaner plot.

1
votes
iso <- V(g1)[degree(g1)==0]
g2 <- delete.vertices(g1, iso)