pause <- function() {}
### Create a star-like graph
t1 <- graph_from_literal(A - B:C:D:E)
t1
pause()
### Define its plotting properties
t1$layout <- layout_in_circle
V(t1)$color <- "white"
V(t1)[name == "A"]$color <- "orange"
V(t1)$size <- 40
V(t1)$label.cex <- 3
V(t1)$label <- V(t1)$name
E(t1)$color <- "black"
E(t1)$width <- 3
pause()
### Plot 't1' and A's transitivity
tr <- transitivity(t1, type = "local")[1]
plot(t1, main = paste("Transitivity of 'A':", tr))
pause()
### Add an edge and recalculate transitivity
t2 <- add_edges(t1, V(t1)[name %in% c("C", "D")], color = "red", width = 3)
tr <- transitivity(t2, type = "local")[1]
plot(t2, main = paste("Transitivity of 'A':", round(tr, 4)))
pause()
### Add two more edges
newe <- match(c("B", "C", "B", "E"), V(t2)$name) - 1
t3 <- add_edges(t2, newe, color = "red", width = 3)
tr <- transitivity(t3, type = "local")[1]
plot(t3, main = paste("Transitivity of 'A':", round(tr, 4)))
pause()
### A one dimensional, circular lattice
ring <- make_ring(50)
ring$layout <- layout_in_circle
V(ring)$size <- 3
plot(ring, vertex.label = NA, main = "Ring graph")
pause()
### Watts-Strogatz model
ws1 <- sample_smallworld(1, 50, 3, p = 0)
ws1$layout <- layout_in_circle
V(ws1)$size <- 3
E(ws1)$curved <- 1
plot(ws1, vertex.label = NA, main = "regular graph")
pause()
### Zoom in to this part
axis(1)
axis(2)
abline(h = c(0.8, 1.1))
abline(v = c(-0.2, 0.2))
pause()
### Zoom in to this part
plot(ws1, vertex.label = NA, xlim = c(-0.2, 0.2), ylim = c(0.8, 1.1))
pause()
### Transitivity of the ring graph
transitivity(ws1)
pause()
### Path lengths, regular graph
mean_distance(ws1)
pause()
### Function to test regular graph with given size
try.ring.pl <- function(n) {
g <- sample_smallworld(1, n, 3, p = 0)
mean_distance(g)
}
try.ring.pl(10)
try.ring.pl(100)
pause()
### Test a number of regular graphs
ring.size <- seq(100, 1000, by = 100)
ring.pl <- sapply(ring.size, try.ring.pl)
plot(ring.size, ring.pl, type = "b")
pause()
### Path lengths, random graph
rg <- sample_gnm(50, 50 * 3)
rg$layout <- layout_in_circle
V(rg)$size <- 3
plot(rg, vertex.label = NA, main = "Random graph")
mean_distance(rg)
pause()
### Path length of random graphs
try.random.pl <- function(n) {
g <- sample_gnm(n, n * 3)
mean_distance(g)
}
try.random.pl(100)
pause()
### Plot network size vs. average path length
random.pl <- sapply(ring.size, try.random.pl)
plot(ring.size, random.pl, type = "b")
pause()
### Plot again, logarithmic 'x' axis
plot(ring.size, random.pl, type = "b", log = "x")
pause()
### Transitivity, random graph, by definition
ecount(rg) / (vcount(rg) * (vcount(rg) - 1) / 2)
transitivity(rg, type = "localaverage")
pause()
### Rewiring
ws2 <- sample_smallworld(1, 50, 3, p = 0.1)
ws2$layout <- layout_in_circle
V(ws2)$size <- 3
plot(ws2, vertex.label = NA)
mean_distance(ws2)
pause()
### Path lengths in randomized lattices
try.rr.pl <- function(n, p) {
g <- sample_smallworld(1, n, 3, p = p)
mean_distance(g)
}
rr.pl.0.1 <- sapply(ring.size, try.rr.pl, p = 0.1)
plot(ring.size, rr.pl.0.1, type = "b")
pause()
### Logarithmic 'x' axis
plot(ring.size, rr.pl.0.1, type = "b", log = "x")
pause()
### Create the graph in the Watts-Strogatz paper
ws.paper <- function(p, n = 1000) {
g <- sample_smallworld(1, n, 10, p = p)
tr <- transitivity(g, type = "localaverage")
pl <- mean_distance(g)
c(tr, pl)
}
pause()
### Do the simulation for a number of 'p' values
rewire.prob <- ((1:10)^4) / (10^4)
ws.result <- sapply(rewire.prob, ws.paper)
dim(ws.result)
pause()
### Plot it
plot(rewire.prob, ws.result[1, ] / ws.result[1, 1],
log = "x", pch = 22,
xlab = "p", ylab = ""
)
points(rewire.prob, ws.result[2, ] / ws.result[2, 1], pch = 20)
legend("bottomleft", c(expression(C(p) / C(0)), expression(L(p) / L(0))),
pch = c(22, 20)
)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.