I'm trying to use the igraph package to draw a (sparse) weighted graph. I currently have an adjacency matrix, but cannot get the graph.adjacency function to recognise the edge weights.
Consider the following random symmetric matrix:
m <- read.table(row.names=1, header=TRUE, text=
" A B C D E F
A 0.00000000 0.0000000 0.0000000 0.0000000 0.05119703 1.3431599
B 0.00000000 0.0000000 -0.6088082 0.4016954 0.00000000 0.6132168
C 0.00000000 -0.6088082 0.0000000 0.0000000 -0.63295415 0.0000000
D 0.00000000 0.4016954 0.0000000 0.0000000 -0.29831267 0.0000000
E 0.05119703 0.0000000 -0.6329541 -0.2983127 0.00000000 0.1562458
F 1.34315990 0.6132168 0.0000000 0.0000000 0.15624584 0.0000000")
m <- as.matrix(m)
To plot, first I must get this adjacency matrix into the proper igraph format. This should be relatively simple with graph.adjacency. According to my reading of the documentation for graph.adjacency, I should do the following:
library(igraph)
ig <- graph.adjacency(m, mode="undirected", weighted=TRUE)
However, it doesn't recognise the edge weights:
str(ig)
# IGRAPH UNW- 6 8 --
# + attr: name (v/c), weight (e/n)
# + edges (vertex names):
# [1] A--E A--F B--C B--D B--F C--E D--E E--F
plot(ig)

How do I get igraph to recognise the edge weights?


isSymmetric(m), and then compare, e.g., the values ofm[5,3]andm[3,5].) - Josh O'BrienisSymmetric(round(m,6)) == TRUE. Interestingly,igraphretained the version with the most decimal places, and in case of discrepancy added 0 at the end of the number with 7 decimal places. - TWLweight (e/n)means that there is an edge attribute calledweight, and it is numeric. See?print.igraph. But they are not plotted by default, you need to add them asedge.label. - Gabor Csardi