Use this if you are using igraph from R
graph_from_adjacency_matrix
is a flexible function for creating igraph
graphs from adjacency matrices.
graph_from_adjacency_matrix( adjmatrix, mode = c("directed", "undirected", "max", "min", "upper", "lower", "plus"), weighted = NULL, diag = TRUE, add.colnames = NULL, add.rownames = NA ) from_adjacency(...)
adjmatrix |
A square adjacency matrix. From igraph version 0.5.1 this
can be a sparse matrix created with the |
mode |
Character scalar, specifies how igraph should interpret the
supplied matrix. See also the |
weighted |
This argument specifies whether to create a weighted graph
from an adjacency matrix. If it is |
diag |
Logical scalar, whether to include the diagonal of the matrix in
the calculation. If this is |
add.colnames |
Character scalar, whether to add the column names as
vertex attributes. If it is ‘ |
add.rownames |
Character scalar, whether to add the row names as vertex
attributes. Possible values the same as the previous argument. By default
row names are not added. If ‘ |
... |
Passed to |
The order of the vertices are preserved, i.e. the vertex corresponding to the first row will be vertex 0 in the graph, etc.
graph_from_adjacency_matrix
operates in two main modes, depending on the
weighted
argument.
If this argument is NULL
then an unweighted graph is created and an
element of the adjacency matrix gives the number of edges to create between
the two corresponding vertices. The details depend on the value of the
mode
argument:
The graph will be directed and a matrix element gives the number of edges between two vertices.
This is exactly the same as max
,
for convenience. Note that it is not checked whether the matrix is
symmetric.
An undirected graph will be created and
max(A(i,j), A(j,i))
gives the number of edges.
An undirected graph will be created, only the upper right triangle (including the diagonal) is used for the number of edges.
An undirected graph will be created, only the lower left triangle (including the diagonal) is used for creating the edges.
undirected graph will be created with min(A(i,j),
A(j,i))
edges between vertex i
and j
.
undirected graph will be created with A(i,j)+A(j,i)
edges between
vertex i
and j
.
If the weighted
argument is not NULL
then the elements of the
matrix give the weights of the edges (if they are not zero). The details
depend on the value of the mode
argument:
The graph will be directed and a matrix element gives the edge weights.
First we check that the matrix is symmetric. It is an error if not. Then only the upper triangle is used to create a weighted undirected graph.
An
undirected graph will be created and max(A(i,j), A(j,i))
gives the
edge weights.
An undirected graph will be created, only the upper right triangle (including the diagonal) is used (for the edge weights).
An undirected graph will be created, only the lower left triangle (including the diagonal) is used for creating the edges.
An undirected graph will be created,
min(A(i,j), A(j,i))
gives the edge weights.
An
undirected graph will be created, A(i,j)+A(j,i)
gives the edge
weights.
An igraph graph object.
Gabor Csardi csardi.gabor@gmail.com
graph and graph_from_literal
for other ways to
create graphs.
adjm <- matrix(sample(0:1, 100, replace=TRUE, prob=c(0.9,0.1)), ncol=10) g1 <- graph_from_adjacency_matrix( adjm ) adjm <- matrix(sample(0:5, 100, replace=TRUE, prob=c(0.9,0.02,0.02,0.02,0.02,0.02)), ncol=10) g2 <- graph_from_adjacency_matrix(adjm, weighted=TRUE) E(g2)$weight ## various modes for weighted graphs, with some tests nzs <- function(x) sort(x [x!=0]) adjm <- matrix(runif(100), 10) adjm[ adjm<0.5 ] <- 0 g3 <- graph_from_adjacency_matrix((adjm + t(adjm))/2, weighted=TRUE, mode="undirected") g4 <- graph_from_adjacency_matrix(adjm, weighted=TRUE, mode="max") all(nzs(pmax(adjm, t(adjm))[upper.tri(adjm)]) == sort(E(g4)$weight)) g5 <- graph_from_adjacency_matrix(adjm, weighted=TRUE, mode="min") all(nzs(pmin(adjm, t(adjm))[upper.tri(adjm)]) == sort(E(g5)$weight)) g6 <- graph_from_adjacency_matrix(adjm, weighted=TRUE, mode="upper") all(nzs(adjm[upper.tri(adjm)]) == sort(E(g6)$weight)) g7 <- graph_from_adjacency_matrix(adjm, weighted=TRUE, mode="lower") all(nzs(adjm[lower.tri(adjm)]) == sort(E(g7)$weight)) g8 <- graph_from_adjacency_matrix(adjm, weighted=TRUE, mode="plus") d2 <- function(x) { diag(x) <- diag(x)/2; x } all(nzs((d2(adjm+t(adjm)))[lower.tri(adjm)]) == sort(E(g8)$weight)) g9 <- graph_from_adjacency_matrix(adjm, weighted=TRUE, mode="plus", diag=FALSE) d0 <- function(x) { diag(x) <- 0 } all(nzs((d0(adjm+t(adjm)))[lower.tri(adjm)]) == sort(E(g9)$weight)) ## row/column names rownames(adjm) <- sample(letters, nrow(adjm)) colnames(adjm) <- seq(ncol(adjm)) g10 <- graph_from_adjacency_matrix(adjm, weighted=TRUE, add.rownames="code") summary(g10)