library(igraph)
## 
## Attaching package: 'igraph'
## The following objects are masked from 'package:stats':
## 
##     decompose, spectrum
## The following object is masked from 'package:base':
## 
##     union
# A simple undirected graph
g <- graph.formula( Alice-Bob-Cecil-Alice, Daniel-Cecil-Eugene, Cecil-Gordon )
g
## IGRAPH cd279cc UN-- 6 6 -- 
## + attr: name (v/c)
## + edges from cd279cc (vertex names):
## [1] Alice--Bob    Alice--Cecil  Bob  --Cecil  Cecil--Daniel Cecil--Eugene
## [6] Cecil--Gordon
plot(g)

# A simple undirected graph
g <- graph.formula( Alice-Bob-Cecil-Alice, Daniel-Cecil-Eugene, Cecil-Gordon )
g
## IGRAPH cd2e2d9 UN-- 6 6 -- 
## + attr: name (v/c)
## + edges from cd2e2d9 (vertex names):
## [1] Alice--Bob    Alice--Cecil  Bob  --Cecil  Cecil--Daniel Cecil--Eugene
## [6] Cecil--Gordon
V(g)
## + 6/6 vertices, named, from cd2e2d9:
## [1] Alice  Bob    Cecil  Daniel Eugene Gordon
graph.famous("Cubical")
## IGRAPH cd2fdb9 U--- 8 12 -- Cubical
## + attr: name (g/c)
## + edges from cd2fdb9:
##  [1] 1--2 2--3 3--4 1--4 5--6 6--7 7--8 5--8 1--5 2--6 3--7 4--8
er <- erdos.renyi.game(100, 100, type="gnm")
plot(er, vertex.size=5, vertex.label=NA, asp=FALSE, vertex.shape="square", layout=layout.fruchterman.reingold, edge.color="black")

ba <- ba.game(100, power=1, m=1)
plot(ba, vertex.size=3, vertex.label=NA, asp=FALSE, vertex.shape="square", layout=layout.fruchterman.reingold, edge.color="black", edge.arrow.size=0.5)

g <- erdos.renyi.game(30, 2/30)
V(g)$color <- sample( c("red", "black"),
vcount(g), rep=TRUE)
V(g)$color
##  [1] "black" "red"   "red"   "black" "red"   "red"   "red"   "red"  
##  [9] "black" "red"   "black" "red"   "red"   "red"   "black" "red"  
## [17] "black" "black" "black" "black" "red"   "red"   "black" "red"  
## [25] "red"   "black" "black" "red"   "red"   "black"
E(g)$color <- "grey"

red <- V(g)[ color == "red" ]
bl <- V(g)[ color == "black" ]
E(g)[ red %--% red ]$color <- "red"
E(g)[ bl %--% bl ]$color <- "black"
plot(g, vertex.size=5, layout=layout.fruchterman.reingold, vertex.label=NA)

library(rgl)
co <- layout.kamada.kawai(g, dim=3)
rglplot(g, vertex.size=5, vertex.label=NA, layout=co)

vertices <- read.csv("http://cneurocvs.rmki.kfki.hu/igraph/judicial.csv")
edges <- read.table("http://cneurocvs.rmki.kfki.hu/igraph/allcites.txt")
jg <- graph.data.frame(edges, vertices=vertices, dir=TRUE)
summary(jg)
## IGRAPH e457ad0 DN-- 30288 216738 -- 
## + attr: name (v/c), usid (v/c), parties (v/c), year (v/n),
## | overruled (v/n), overruling (v/c), oxford (v/n), liihc (v/n),
## | indeg (v/n), outdeg (v/n), hub (v/n), hubrank (v/n), auth (v/n),
## | authrank (v/n), between (v/n), incent (v/n)
# How many components?
no.clusters(jg)
## [1] 4881
# How big are these?
table(clusters(jg)$csize)
## 
##     1     3     4 25389 
##  4871     8     1     1
library(igraph)
# In-degree distribution
plot(degree.distribution(jg, mode="in"), log="xy")
## Warning in xy.coords(x, y, xlabel, ylabel, log): 107 y values <= 0 omitted
## from logarithmic plot

# Out-degree distribution
plot(degree.distribution(jg, mode="out"), log="xy")
## Warning in xy.coords(x, y, xlabel, ylabel, log): 76 y values <= 0 omitted
## from logarithmic plot

# Taking the largest component
cl <- clusters(jg)
jg2 <- subgraph(jg, which(cl$membership == which.max(cl$csize)-1)-1)
## Warning in subgraph(jg, which(cl$membership == which.max(cl$csize) - 1) - :
## At structural_properties.c:1984 :igraph_subgraph is deprecated from igraph
## 0.6, use igraph_induced_subgraph instead
summary(jg2)
## IGRAPH e492ec1 DN-- 1 0 -- 
## + attr: name (v/c), usid (v/c), parties (v/c), year (v/n),
## | overruled (v/n), overruling (v/c), oxford (v/n), liihc (v/n),
## | indeg (v/n), outdeg (v/n), hub (v/n), hubrank (v/n), auth (v/n),
## | authrank (v/n), between (v/n), incent (v/n)
library(igraph)
network <- graph(edges=c("A","B", "A","C","A","E", "B","C", "C","E", "E","D"), directed=FALSE)

library(igraph)
net2 <- graph(edges=c("G","H", "H","I","I","J", "J","I", "H","J", "G","K", "K","H", "K","I"), directed=TRUE)

library(igraph)
g1 <- graph( edges=c(1,2, 2,3, 3, 1), n=3, directed=F )
plot(g1)

class(g1)
## [1] "igraph"
g1
## IGRAPH e498928 U--- 3 3 -- 
## + edges from e498928:
## [1] 1--2 2--3 1--3
#with 10 vertices, and directed by default:
g2 <- graph( edges=c(1,2, 2,3, 3, 1), n=10 )
plot(g2)

g2
## IGRAPH e4abf6e D--- 10 3 -- 
## + edges from e4abf6e:
## [1] 1->2 2->3 3->1
g3 <- graph( c("John", "Jim", "Jim", "Jill", "Jill", "John")) # named vertices
# When the edge list has vertex names, the number of nodes is not needed
plot(g3)

g3
## IGRAPH e4b87c4 DN-- 3 3 -- 
## + attr: name (v/c)
## + edges from e4b87c4 (vertex names):
## [1] John->Jim  Jim ->Jill Jill->John
g4 <- graph( c("John", "Jim", "Jim", "Jack", "Jim", "Jack", "John", "John"),
isolates=c("Jesse", "Janis", "Jennifer", "Justin") )
# In named graphs we can specify isolates by providing a list of their names.
plot(g4, edge.arrow.size=.5, vertex.color="gold", vertex.size=15, vertex.frame.color="gray", vertex.label.color="green",
vertex.label.cex=0.8, vertex.label.dist=2, edge.curved=0.2)

plot(graph_from_literal(a---b, b---c)) # the number of dashes immaterial

plot(graph_from_literal(a--+b, b+--c))

plot(graph_from_literal(a+-+b, b+-+c))

plot(graph_from_literal(a:b:c---c:d:e))

gl <- graph_from_literal(a-b-c-d-e-f, a-g-h-b, h-e:f:i, j)
plot(gl)

E(g4) # The edges of the object
## + 4/4 edges from e4c5c52 (vertex names):
## [1] John->Jim  Jim ->Jack Jim ->Jack John->John
V(g4) # The vertices of the object
## + 7/7 vertices, named, from e4c5c52:
## [1] John     Jim      Jack     Jesse    Janis    Jennifer Justin
g4[]

## 7 x 7 sparse Matrix of class "dgCMatrix"
##          John Jim Jack Jesse Janis Jennifer Justin
## John        1   1    .     .     .        .      .
## Jim         .   .    2     .     .        .      .
## Jack        .   .    .     .     .        .      .
## Jesse       .   .    .     .     .        .      .
## Janis       .   .    .     .     .        .      .
## Jennifer    .   .    .     .     .        .      .
## Justin      .   .    .     .     .        .      .
g4[1,]
##     John      Jim     Jack    Jesse    Janis Jennifer   Justin 
##        1        1        0        0        0        0        0
g4[3,3] <- 10
g4[5,7] <- 10
V(g4)$name # automatically generated when we created the network
## [1] "John"     "Jim"      "Jack"     "Jesse"    "Janis"    "Jennifer"
## [7] "Justin"
V(g4)$gender <- c("male", "male", "male", "male", "female", "female", "male")
E(g4)$type <- "email" # Edge attribute, assign "email" to all edges
E(g4)$weight <- 10 # Edge weight, setting all existing edges to 10

edge_attr(g4)
## $type
## [1] "email" "email" "email" "email" "email" "email"
## 
## $weight
## [1] 10 10 10 10 10 10
vertex_attr(g4)
## $name
## [1] "John"     "Jim"      "Jack"     "Jesse"    "Janis"    "Jennifer"
## [7] "Justin"  
## 
## $gender
## [1] "male"   "male"   "male"   "male"   "female" "female" "male"
graph_attr(g4)
## named list()
g4 <- set_graph_attr(g4, "name", "Email Network")
g4 <- set_graph_attr(g4, "something", "A thing")
graph_attr_names(g4)
## [1] "name"      "something"
graph_attr(g4, "name")
## [1] "Email Network"
graph_attr(g4)
## $name
## [1] "Email Network"
## 
## $something
## [1] "A thing"
g4 <- delete_graph_attr(g4, "something")
graph_attr(g4)
## $name
## [1] "Email Network"
plot(g4, edge.arrow.size=.5, vertex.label.color="black", vertex.label.dist=1.5,
vertex.color=c( "pink", "skyblue")[1+(V(g4)$gender=="male")] )

eg <- make_empty_graph(40)
plot(eg, vertex.size=10, vertex.label=NA)

fg <- make_full_graph(40)
plot(fg, vertex.size=10, vertex.label=NA)

st <- make_star(40)
plot(st, vertex.size=10, vertex.label=NA)

tr <- make_tree(40, children = 3, mode = "undirected")
plot(tr, vertex.size=10, vertex.label=NA)

rn <- make_ring(40)
plot(rn, vertex.size=10, vertex.label=NA)

er <- sample_gnm(n=100, m=40)
plot(er, vertex.size=6, vertex.label=NA)

sw <- sample_smallworld(dim=2, size=10, nei=1, p=0.1)
plot(sw, vertex.size=6, vertex.label=NA, layout=layout_in_circle)

ba <- sample_pa(n=100, power=1, m=1, directed=F) 
plot(ba, vertex.size=6, vertex.label=NA)

zach <- graph("Zachary") # the Zachary carate club
plot(zach, vertex.size=10, vertex.label=NA)

rn.rewired <- rewire(rn, each_edge(prob=0.1))
plot(rn.rewired, vertex.size=10, vertex.label=NA)

rn.neigh = connect.neighborhood(rn, 5)
plot(rn.neigh, vertex.size=8, vertex.label=NA)

plot(rn, vertex.size=10, vertex.label=NA)

plot(tr, vertex.size=10, vertex.label=NA)

plot(rn %du% tr, vertex.size=10, vertex.label=NA)