6

I have an matrix as below:

          jerry    peter    king
 jerry     1       0        0    
 peter     0       1        0    
 king      1       1        1              

Now I am trying to draw a graph standing for the matrix with the code below:

t <- read.table("../data/table.dat");
adjm <- data.matrix(t);
g1 <- graph.adjacency(adjm,add.colnames=NULL);
plot(g1, main="social network", vertex.color="white", edge.color="grey", vertex.size=8,
     vertex.frame.color="yellow");

The labels of the vertices is the id, so my question is how do I set the label of the vertices by the dimnames of the matrix?

I have tried to the code

vertex.label=attr(adjm,"dimnames")

but get the wrong graph.

joran
  • 169,992
  • 32
  • 429
  • 468
jerry_sjtu
  • 5,216
  • 8
  • 29
  • 42

1 Answers1

10

There are 2 ways to do this:

  1. When you create the graph object, assign the names to a vertex attribute called label. This is the default that plot.igraph() looks for when plotting.

    g1 <- graph.adjacency(adjm,add.colnames='label')
    
  2. Use the V iterator to extract the name vertex attribute, which is how they are stored if you use add.colnames=NULL.

    plot(g1, main="social network", vertex.color="white", edge.color="grey", vertex.size=8, vertex.frame.color="yellow", vertex.label=V(g1)$name)
    

Either way will give you your desired result. Something like:

enter image description here

John Colby
  • 22,169
  • 4
  • 57
  • 69