====== T1. ====== ''%%install.packages("igraph")%%'' see [[https://igraph.org/r/doc/index.html]] ===== Dataset ===== "source","target","weight" "C-3PO","R2-D2",17 "LUKE","R2-D2",13 "OBI-WAN","R2-D2",6 "LEIA","R2-D2",5 "HAN","R2-D2",5 "CHEWBACCA","R2-D2",3 "DODONNA","R2-D2",1 "CHEWBACCA","OBI-WAN",7 "C-3PO","CHEWBACCA",5 "CHEWBACCA","LUKE",16 "CHEWBACCA","HAN",19 "CHEWBACCA","LEIA",11 "CHEWBACCA","DARTH VADER",1 "CHEWBACCA","DODONNA",1 "CAMIE","LUKE",2 "BIGGS","CAMIE",2 "BIGGS","LUKE",4 "DARTH VADER","LEIA",1 "BERU","LUKE",3 "BERU","OWEN",3 "BERU","C-3PO",2 "LUKE","OWEN",3 "C-3PO","LUKE",18 "C-3PO","OWEN",2 "C-3PO","LEIA",6 "LEIA","LUKE",17 "BERU","LEIA",1 "LUKE","OBI-WAN",19 "C-3PO","OBI-WAN",6 "LEIA","OBI-WAN",1 "MOTTI","TARKIN",2 "DARTH VADER","MOTTI",1 "DARTH VADER","TARKIN",7 "HAN","OBI-WAN",9 "HAN","LUKE",26 "GREEDO","HAN",1 "HAN","JABBA",1 "C-3PO","HAN",6 "LEIA","MOTTI",1 "LEIA","TARKIN",1 "HAN","LEIA",13 "DARTH VADER","OBI-WAN",1 "DODONNA","GOLD LEADER",1 "DODONNA","WEDGE",1 "DODONNA","LUKE",1 "GOLD LEADER","WEDGE",1 "GOLD LEADER","LUKE",1 "LUKE","WEDGE",2 "BIGGS","LEIA",1 "LEIA","RED LEADER",1 "LUKE","RED LEADER",3 "BIGGS","RED LEADER",3 "BIGGS","C-3PO",1 "C-3PO","RED LEADER",1 "RED LEADER","WEDGE",3 "GOLD LEADER","RED LEADER",1 "BIGGS","WEDGE",2 "RED LEADER","RED TEN",1 "BIGGS","GOLD LEADER",1 "LUKE","RED TEN",1 "name","id" "R2-D2",0 "CHEWBACCA",1 "C-3PO",2 "LUKE",3 "DARTH VADER",4 "CAMIE",5 "BIGGS",6 "LEIA",7 "BERU",8 "OWEN",9 "OBI-WAN",10 "MOTTI",11 "TARKIN",12 "HAN",13 "GREEDO",14 "JABBA",15 "DODONNA",16 "GOLD LEADER",17 "WEDGE",18 "RED LEADER",19 "RED TEN",20 "GOLD FIVE",21 ===== Analysis ===== t.e <- read.csv("http://commres.net/wiki/_export/code/r/social_network_analysis_tutorial?codeblock=0", sep = ",") head(t.e) t.n <- read.csv("http://commres.net/wiki/_export/code/r/social_network_analysis_tutorial?codeblock=1", sep = ",") head(t.n) > t.e <- read.csv("http://commres.net/wiki/_export/code/r/social_network_analysis_tutorial?codeblock=0", sep = ",") > head(t.e) source target weight 1 C-3PO R2-D2 17 2 LUKE R2-D2 13 3 OBI-WAN R2-D2 6 4 LEIA R2-D2 5 5 HAN R2-D2 5 6 CHEWBACCA R2-D2 3 > > t.n <- read.csv("http://commres.net/wiki/_export/code/r/social_network_analysis_tutorial?codeblock=1", sep = ",") > head(t.n) name id 1 R2-D2 0 2 CHEWBACCA 1 3 C-3PO 2 4 LUKE 3 5 DARTH VADER 4 6 CAMIE 5 > library(igraph) g <- graph_from_data_frame(d=t.e, vertices=t.n, directed=FALSE) g > library(igraph) > g <- graph_from_data_frame(d=t.e, vertices=t.n, directed=FALSE) > g IGRAPH 9b91a04 UNW- 22 60 -- + attr: name (v/c), id (v/n), weight (e/n) + edges from 9b91a04 (vertex names): [1] R2-D2 --C-3PO R2-D2 --LUKE R2-D2 --OBI-WAN [4] R2-D2 --LEIA R2-D2 --HAN R2-D2 --CHEWBACCA [7] R2-D2 --DODONNA CHEWBACCA --OBI-WAN CHEWBACCA --C-3PO [10] CHEWBACCA --LUKE CHEWBACCA --HAN CHEWBACCA --LEIA [13] CHEWBACCA --DARTH VADER CHEWBACCA --DODONNA LUKE --CAMIE [16] CAMIE --BIGGS LUKE --BIGGS DARTH VADER--LEIA [19] LUKE --BERU BERU --OWEN C-3PO --BERU [22] LUKE --OWEN C-3PO --LUKE C-3PO --OWEN + ... omitted several edges > ''%%IGRAPH 9b91a04 UNW- 22 60 -- %%'' ''%%+ attr: name (v/c), id (v/n), weight (e/n)%%'' ''%%+ edges from 9b91a04 (vertex names):%%'' Vertices = Nodes IGRAPH ID(#) U: Undirected N: Named graph W: Weighted graph name (v/c): name = vetices(nodes) graph, character id(v/n): id = vertices(nodes) graph, numeric weight(e/n): weight = edge graph, numeric V(g) # print nodes > V(g) # print nodes + 22/22 vertices, named, from 9b91a04: [1] R2-D2 CHEWBACCA C-3PO LUKE DARTH VADER CAMIE [7] BIGGS LEIA BERU OWEN OBI-WAN MOTTI [13] TARKIN HAN GREEDO JABBA DODONNA GOLD LEADER [19] WEDGE RED LEADER RED TEN GOLD FIVE > V(g)$name # print name attributes in nodes [1] "R2-D2" "CHEWBACCA" "C-3PO" "LUKE" "DARTH VADER" [6] "CAMIE" "BIGGS" "LEIA" "BERU" "OWEN" [11] "OBI-WAN" "MOTTI" "TARKIN" "HAN" "GREEDO" [16] "JABBA" "DODONNA" "GOLD LEADER" "WEDGE" "RED LEADER" [21] "RED TEN" "GOLD FIVE" > V(g)$id # id attributes of the nodes [1] 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 > vertex_attr(g) # all attributes of the nodes > vertex_attr(g) # all attributes of the nodes $name [1] "R2-D2" "CHEWBACCA" "C-3PO" "LUKE" "DARTH VADER" [6] "CAMIE" "BIGGS" "LEIA" "BERU" "OWEN" [11] "OBI-WAN" "MOTTI" "TARKIN" "HAN" "GREEDO" [16] "JABBA" "DODONNA" "GOLD LEADER" "WEDGE" "RED LEADER" [21] "RED TEN" "GOLD FIVE" $id [1] 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 > E(g) # print edges > E(g) # edges + 60/60 edges from 9b91a04 (vertex names): [1] R2-D2 --C-3PO R2-D2 --LUKE R2-D2 --OBI-WAN [4] R2-D2 --LEIA R2-D2 --HAN R2-D2 --CHEWBACCA [7] R2-D2 --DODONNA CHEWBACCA --OBI-WAN CHEWBACCA --C-3PO [10] CHEWBACCA --LUKE CHEWBACCA --HAN CHEWBACCA --LEIA [13] CHEWBACCA --DARTH VADER CHEWBACCA --DODONNA LUKE --CAMIE [16] CAMIE --BIGGS LUKE --BIGGS DARTH VADER--LEIA [19] LUKE --BERU BERU --OWEN C-3PO --BERU [22] LUKE --OWEN C-3PO --LUKE C-3PO --OWEN [25] C-3PO --LEIA LUKE --LEIA LEIA --BERU [28] LUKE --OBI-WAN C-3PO --OBI-WAN LEIA --OBI-WAN + ... omitted several edges > E(g)$weight # print weight attributes in edge > E(g)$weight # print weight attributes in edge [1] 17 13 6 5 5 3 1 7 5 16 19 11 1 1 2 2 4 1 3 3 2 3 18 2 6 17 [27] 1 19 6 1 2 1 7 9 26 1 1 6 1 1 13 1 1 1 1 1 1 2 1 1 3 3 [53] 1 1 3 1 2 1 1 1 > edge_attr(g) # all attributes of the edges > edge_attr(g) # all attributes of the edges $weight [1] 17 13 6 5 5 3 1 7 5 16 19 11 1 1 2 2 4 1 3 3 2 3 18 2 6 17 [27] 1 19 6 1 2 1 7 9 26 1 1 6 1 1 13 1 1 1 1 1 1 2 1 1 3 3 [53] 1 1 3 1 2 1 1 1 g[] # adjacency matrix > g[] # adjacency matrix 22 x 22 sparse Matrix of class "dgCMatrix" [[ suppressing 22 column names ‘R2-D2’, ‘CHEWBACCA’, ‘C-3PO’ ... ]] ## 컬럼 id 생략 R2-D2 . 3 17 13 . . . 5 . . 6 . . 5 . . 1 . . . . . CHEWBACCA 3 . 5 16 1 . . 11 . . 7 . . 19 . . 1 . . . . . C-3PO 17 5 . 18 . . 1 6 2 2 6 . . 6 . . . . . 1 . . LUKE 13 16 18 . . 2 4 17 3 3 19 . . 26 . . 1 1 2 3 1 . DARTH VADER . 1 . . . . . 1 . . 1 1 7 . . . . . . . . . CAMIE . . . 2 . . 2 . . . . . . . . . . . . . . . BIGGS . . 1 4 . 2 . 1 . . . . . . . . . 1 2 3 . . LEIA 5 11 6 17 1 . 1 . 1 . 1 1 1 13 . . . . . 1 . . BERU . . 2 3 . . . 1 . 3 . . . . . . . . . . . . OWEN . . 2 3 . . . . 3 . . . . . . . . . . . . . OBI-WAN 6 7 6 19 1 . . 1 . . . . . 9 . . . . . . . . MOTTI . . . . 1 . . 1 . . . . 2 . . . . . . . . . TARKIN . . . . 7 . . 1 . . . 2 . . . . . . . . . . HAN 5 19 6 26 . . . 13 . . 9 . . . 1 1 . . . . . . GREEDO . . . . . . . . . . . . . 1 . . . . . . . . JABBA . . . . . . . . . . . . . 1 . . . . . . . . DODONNA 1 1 . 1 . . . . . . . . . . . . . 1 1 . . . GOLD LEADER . . . 1 . . 1 . . . . . . . . . 1 . 1 1 . . WEDGE . . . 2 . . 2 . . . . . . . . . 1 1 . 3 . . RED LEADER . . 1 3 . . 3 1 . . . . . . . . . 1 3 . 1 . RED TEN . . . 1 . . . . . . . . . . . . . . . 1 . . GOLD FIVE . . . . . . . . . . . . . . . . . . . . . . g[1,] # first row of adjacency matrix data.frame(g[1,]) # easy on eyes > g[1,] # first row of adjacency matrix R2-D2 CHEWBACCA C-3PO LUKE DARTH VADER CAMIE BIGGS LEIA 0 3 17 13 0 0 0 5 BERU OWEN OBI-WAN MOTTI TARKIN HAN GREEDO JABBA 0 0 6 0 0 5 0 0 DODONNA GOLD LEADER WEDGE RED LEADER RED TEN GOLD FIVE 1 0 0 0 0 0 > > data.frame(g[1,]) g.1... R2-D2 0 CHEWBACCA 3 C-3PO 17 LUKE 13 DARTH VADER 0 CAMIE 0 BIGGS 0 LEIA 5 BERU 0 OWEN 0 OBI-WAN 6 MOTTI 0 TARKIN 0 HAN 5 GREEDO 0 JABBA 0 DODONNA 1 GOLD LEADER 0 WEDGE 0 RED LEADER 0 RED TEN 0 GOLD FIVE 0 ===== Vis ===== plot(g) {{:r:pasted:20191127-070843.png}} par(mar=c(0,0,0,0)) plot(g) {{:r:pasted:20191127-070942.png}} par(mar=c(0,0,0,0)) plot(g, vertex.color = "grey", # change color of nodes vertex.label.color = "black", # change color of labels vertex.label.cex = .75, # change size of labels to 75% of original size edge.curved=.15, # add a 15% curve to the edges edge.color="grey20") # change edge color to grey {{:r:pasted:20191127-071117.png}} strength(g) as.data.frame(strength(g)) > strength(g) R2-D2 CHEWBACCA C-3PO LUKE DARTH VADER CAMIE BIGGS 50 63 64 129 11 4 14 LEIA BERU OWEN OBI-WAN MOTTI TARKIN HAN 59 9 8 49 4 10 80 GREEDO JABBA DODONNA GOLD LEADER WEDGE RED LEADER RED TEN 1 1 5 5 9 13 2 GOLD FIVE 0 > data.frame(strength(g)) strength.g. R2-D2 50 CHEWBACCA 63 C-3PO 64 LUKE 129 DARTH VADER 11 CAMIE 4 BIGGS 14 LEIA 59 BERU 9 OWEN 8 OBI-WAN 49 MOTTI 4 TARKIN 10 HAN 80 GREEDO 1 JABBA 1 DODONNA 5 GOLD LEADER 5 WEDGE 9 RED LEADER 13 RED TEN 2 GOLD FIVE 0 > V(g)$size <- strength(g) par(mar=c(0,0,0,0)) plot(g) {{:r:pasted:20191127-071754.png}} # taking the log to improve it V(g)$size <- log(strength(g)) * 4 + 3 par(mar=c(0,0,0,0)) plot(g) {{:r:pasted:20191127-071937.png}} plot(g, vertex.color = "grey", # change color of nodes vertex.label.color = "black", # change color of labels vertex.label.cex = .75, # change size of labels to 75% of original size edge.curved=.25, # add a 25% curve to the edges edge.color="grey20") # change edge color to grey {{:r:pasted:20191127-072110.png}} V(g)$label <- ifelse( strength(g)>=10, V(g)$name, NA ) par(mar=c(0,0,0,0)) plot(g, vertex.color = "grey", # change color of nodes vertex.label.color = "black", # change color of labels vertex.label.cex = .75, # change size of labels to 75% of original size edge.curved=.25, # add a 25% curve to the edges edge.color="grey20") # change edge color to grey {{:r:pasted:20191127-072258.png}} t.n ===== Using ifelse ===== t.n > t.n name id 1 R2-D2 0 2 CHEWBACCA 1 3 C-3PO 2 4 LUKE 3 5 DARTH VADER 4 6 CAMIE 5 7 BIGGS 6 8 LEIA 7 9 BERU 8 10 OWEN 9 11 OBI-WAN 10 12 MOTTI 11 13 TARKIN 12 14 HAN 13 15 GREEDO 14 16 JABBA 15 17 DODONNA 16 18 GOLD LEADER 17 19 WEDGE 18 20 RED LEADER 19 21 RED TEN 20 22 GOLD FIVE 21 > t.n$name=="R2-D2" > t.n$name=="R2-D2" [1] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE > as.data.frame(t.n$name=="R2-D2") > as.data.frame(t.n$name=="R2-D2") t.n$name == "R2-D2" 1 TRUE 2 FALSE 3 FALSE 4 FALSE 5 FALSE 6 FALSE 7 FALSE 8 FALSE 9 FALSE 10 FALSE 11 FALSE 12 FALSE 13 FALSE 14 FALSE 15 FALSE 16 FALSE 17 FALSE 18 FALSE 19 FALSE 20 FALSE 21 FALSE 22 FALSE > tmp.a <- as.data.frame(t.n) tmp.b <- as.data.frame(t.n$name=="R2-D2") tmp <- data.frame(tmp.a, tmp.b) tmp > tmp.a <- as.data.frame(t.n) > tmp.b <- as.data.frame(t.n$name=="R2-D2") > tmp <- data.frame(tmp.a, tmp.b) > tmp name id t.n.name.....R2.D2. 1 R2-D2 0 TRUE 2 CHEWBACCA 1 FALSE 3 C-3PO 2 FALSE 4 LUKE 3 FALSE 5 DARTH VADER 4 FALSE 6 CAMIE 5 FALSE 7 BIGGS 6 FALSE 8 LEIA 7 FALSE 9 BERU 8 FALSE 10 OWEN 9 FALSE 11 OBI-WAN 10 FALSE 12 MOTTI 11 FALSE 13 TARKIN 12 FALSE 14 HAN 13 FALSE 15 GREEDO 14 FALSE 16 JABBA 15 FALSE 17 DODONNA 16 FALSE 18 GOLD LEADER 17 FALSE 19 WEDGE 18 FALSE 20 RED LEADER 19 FALSE 21 RED TEN 20 FALSE 22 GOLD FIVE 21 FALSE ifelse(t.n$name=="R2-D2", "yes", "no") > ifelse(t.n$name=="R2-D2", "yes", "no") [1] "yes" "no" "no" "no" "no" "no" "no" "no" "no" "no" "no" "no" [13] "no" "no" "no" "no" "no" "no" "no" "no" "no" "no" > ifelse(grepl("R", t.n$name), "yes", "no") # grep function > ifelse(grepl("R", t.n$name), "yes", "no") [1] "yes" "no" "no" "no" "yes" "no" "no" "no" "yes" "no" "no" "no" [13] "yes" "no" "yes" "no" "no" "yes" "no" "yes" "yes" "no" > tmp.a <- data.frame(t.n$name) tmp.b <- data.frame(ifelse(grepl("R", t.n$name), "yes", "no")) data.frame(tmp.a, tmp.b) > tmp.a <- data.frame(t.n$name) > tmp.b <- data.frame(ifelse(grepl("R", t.n$name), "yes", "no")) > data.frame(tmp.a, tmp.b) t.n.name ifelse.grepl..R...t.n.name....yes....no.. 1 R2-D2 yes 2 CHEWBACCA no 3 C-3PO no 4 LUKE no 5 DARTH VADER yes 6 CAMIE no 7 BIGGS no 8 LEIA no 9 BERU yes 10 OWEN no 11 OBI-WAN no 12 MOTTI no 13 TARKIN yes 14 HAN no 15 GREEDO yes 16 JABBA no 17 DODONNA no 18 GOLD LEADER yes 19 WEDGE no 20 RED LEADER yes 21 RED TEN yes 22 GOLD FIVE no > ===== Coloring nodes ===== dark_side <- c("DARTH VADER", "MOTTI", "TARKIN") light_side <- c("R2-D2", "CHEWBACCA", "C-3PO", "LUKE", "CAMIE", "BIGGS", "LEIA", "BERU", "OWEN", "OBI-WAN", "HAN", "DODONNA", "GOLD LEADER", "WEDGE", "RED LEADER", "RED TEN", "GOLD FIVE") other <- c("GREEDO", "JABBA") # node we'll create a new color variable as a node property V(g)$color <- NA V(g)$color[V(g)$name %in% dark_side] <- "red" V(g)$color[V(g)$name %in% light_side] <- "gold" V(g)$color[V(g)$name %in% other] <- "grey20" vertex_attr(g) > dark_side <- c("DARTH VADER", "MOTTI", "TARKIN") > light_side <- c("R2-D2", "CHEWBACCA", "C-3PO", "LUKE", "CAMIE", "BIGGS", + "LEIA", "BERU", "OWEN", "OBI-WAN", "HAN", "DODONNA", + "GOLD LEADER", "WEDGE", "RED LEADER", "RED TEN", "GOLD FIVE") > other <- c("GREEDO", "JABBA") > # node we'll create a new color variable as a node property > V(g)$color <- NA > V(g)$color[V(g)$name %in% dark_side] <- "red" > V(g)$color[V(g)$name %in% light_side] <- "gold" > V(g)$color[V(g)$name %in% other] <- "grey20" > vertex_attr(g) $name [1] "R2-D2" "CHEWBACCA" "C-3PO" "LUKE" "DARTH VADER" [6] "CAMIE" "BIGGS" "LEIA" "BERU" "OWEN" [11] "OBI-WAN" "MOTTI" "TARKIN" "HAN" "GREEDO" [16] "JABBA" "DODONNA" "GOLD LEADER" "WEDGE" "RED LEADER" [21] "RED TEN" "GOLD FIVE" $id [1] 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 $size [1] 18.648092 19.572539 19.635532 22.439250 12.591581 8.545177 13.556229 [8] 19.310150 11.788898 11.317766 18.567281 8.545177 12.210340 20.528107 [15] 3.000000 3.000000 9.437752 9.437752 11.788898 13.259797 5.772589 [22] -Inf $label [1] "R2-D2" "CHEWBACCA" "C-3PO" "LUKE" "DARTH VADER" [6] NA "BIGGS" "LEIA" NA NA [11] "OBI-WAN" NA "TARKIN" "HAN" NA [16] NA NA NA NA "RED LEADER" [21] NA NA $color [1] "gold" "gold" "gold" "gold" "red" "gold" "gold" "gold" [9] "gold" "gold" "gold" "red" "red" "gold" "grey20" "grey20" [17] "gold" "gold" "gold" "gold" "gold" "gold" > par(mar=c(0,0,0,0)) plot(g) {{:r:pasted:20191127-074438.png}} ===== %in% ===== # what does %in% do? 1 %in% c(1,2,3,4) 1 %in% c(2,3,4) > 1 %in% c(1,2,3,4) [1] TRUE > 1 %in% c(2,3,4) [1] FALSE > dark_side <- c("DARTH VADER", "MOTTI", "TARKIN") light_side <- c("R2-D2", "CHEWBACCA", "C-3PO", "LUKE", "CAMIE", "BIGGS", "LEIA", "BERU", "OWEN", "OBI-WAN", "HAN", "DODONNA", "GOLD LEADER", "WEDGE", "RED LEADER", "RED TEN", "GOLD FIVE") other <- c("GREEDO", "JABBA") # node we'll create a new color variable as a node property V(g)$color <- NA # V(g)에 color라는 컬럼을 만든다 V(g)$color[V(g)$name %in% dark_side] <- "red" # V(g)$name이 dark_side에 있는 이름이면 color 컬럼에 "red"를 적는다. V(g)$color[V(g)$name %in% light_side] <- "gold" V(g)$color[V(g)$name %in% other] <- "grey20" vertex_attr(g) par(mar=c(0,0,0,0)) plot(g) legend(x=.75, y=.75, legend=c("Dark side", "Light side", "Other"), pch=21, pt.bg=c("red", "gold", "grey20"), pt.cex=2, bty="n") {{:r:pasted:20191127-075029.png}} ===== Edges ===== E(g)$width <- log(E(g)$weight) + 1.5 # create width column in the graph, g edge_attr(g) > E(g)$width <- log(E(g)$weight) + 1.5 # create width column in the graph, g > edge_attr(g) $weight [1] 17 13 6 5 5 3 1 7 5 16 19 11 1 1 2 2 [17] 4 1 3 3 2 3 18 2 6 17 1 19 6 1 2 1 [33] 7 9 26 1 1 6 1 1 13 1 1 1 1 1 1 2 [49] 1 1 3 3 1 1 3 1 2 1 1 1 $width [1] 4.333213 4.064949 3.291759 3.109438 3.109438 [6] 2.598612 1.500000 3.445910 3.109438 4.272589 [11] 4.444439 3.897895 1.500000 1.500000 2.193147 [16] 2.193147 2.886294 1.500000 2.598612 2.598612 [21] 2.193147 2.598612 4.390372 2.193147 3.291759 [26] 4.333213 1.500000 4.444439 3.291759 1.500000 [31] 2.193147 1.500000 3.445910 3.697225 4.758097 [36] 1.500000 1.500000 3.291759 1.500000 1.500000 [41] 4.064949 1.500000 1.500000 1.500000 1.500000 [46] 1.500000 1.500000 2.193147 1.500000 1.500000 [51] 2.598612 2.598612 1.500000 1.500000 2.598612 [56] 1.500000 2.193147 1.500000 1.500000 1.500000 par(mar=c(0,0,0,0)) plot(g) {{:r:pasted:20191127-080219.png}} par(mfrow=c(2, 3), mar=c(0,0,1,0)) plot(g, layout=layout_randomly, main="Random") plot(g, layout=layout_in_circle, main="Circle") plot(g, layout=layout_as_star, main="Star") plot(g, layout=layout_as_tree, main="Tree") plot(g, layout=layout_on_grid, main="Grid") plot(g, layout=layout_with_fr, main="Force-directed") par(mfrow=c(1, 1), mar=c(0,0,0,0)) # set it back to the previous setting {{:r:pasted:20191127-080437.png}} cf. layout_with_fr: The Fruchterman-Reingold layout algorithm see [[https://www.rdocumentation.org/packages/igraph/versions/1.3.5/topics/layout_with_fr]] page par(mfrow=c(1,2)) set.seed(777) fr <- layout_with_fr(g, niter=1000) par(mar=c(0,0,0,0)); plot(g, layout=fr) set.seed(666) fr <- layout_with_fr(g, niter=1000) par(mar=c(0,0,0,0)); plot(g, layout=fr) {{:r:pasted:20191127-080758.png}} ===== Measurements ===== degree(g, mode = "all") closeness(g, mode = "all", weights = NA, normalized = T) betweenness(g, directed = F, weights = NA, normalized = T) > degree(g, mode = "all") R2-D2 CHEWBACCA C-3PO LUKE DARTH VADER CAMIE BIGGS 7 8 10 15 5 2 7 LEIA BERU OWEN OBI-WAN MOTTI TARKIN HAN 12 4 3 7 3 3 8 GREEDO JABBA DODONNA GOLD LEADER WEDGE RED LEADER RED TEN 1 1 5 5 5 7 2 GOLD FIVE 0 > closeness(g, mode = "all", weights = NA, normalized = T) R2-D2 CHEWBACCA C-3PO LUKE DARTH VADER CAMIE BIGGS 0.38181818 0.38888889 0.40384615 0.44680851 0.32812500 0.32307692 0.36842105 LEIA BERU OWEN OBI-WAN MOTTI TARKIN HAN 0.42000000 0.35000000 0.32812500 0.38181818 0.31343284 0.31343284 0.38888889 GREEDO JABBA DODONNA GOLD LEADER WEDGE RED LEADER RED TEN 0.28767123 0.28767123 0.34426230 0.33870968 0.33870968 0.36842105 0.32307692 GOLD FIVE 0.04545455 Warning message: In closeness(g, mode = "all", weights = NA, normalized = T) : At centrality.c:2784 :closeness centrality is not well-defined for disconnected graphs > betweenness(g, directed = F, weights = NA, normalized = T) R2-D2 CHEWBACCA C-3PO LUKE DARTH VADER CAMIE BIGGS 0.011904762 0.035487528 0.057596372 0.297278912 0.011904762 0.000000000 0.032142857 LEIA BERU OWEN OBI-WAN MOTTI TARKIN HAN 0.217120181 0.005442177 0.000000000 0.014852608 0.000000000 0.000000000 0.176190476 GREEDO JABBA DODONNA GOLD LEADER WEDGE RED LEADER RED TEN 0.000000000 0.000000000 0.011111111 0.003174603 0.003174603 0.032142857 0.000000000 GOLD FIVE 0.000000000 > g.c.deg <- degree(g, mode = "all") g.c.clo <- closeness(g, mode = "all", weights = NA, normalized = T) g.c.bet <- betweenness(g, directed = F, weights = NA, normalized = T) tmp <- data.frame(g.c.deg, g.c.clo, g.c.bet) tmp[order(-g.c.clo, -g.c.bet),] > g.c.deg <- degree(g, mode = "all") > g.c.clo <- closeness(g, mode = "all", weights = NA, normalized = T) Warning message: In closeness(g, mode = "all", weights = NA, normalized = T) : At centrality.c:2784 :closeness centrality is not well-defined for disconnected graphs > g.c.bet <- betweenness(g, directed = F, weights = NA, normalized = T) > tmp <- data.frame(g.c.deg, g.c.clo, g.c.bet) > > tmp g.c.deg g.c.clo g.c.bet R2-D2 7 0.38181818 0.011904762 CHEWBACCA 8 0.38888889 0.035487528 C-3PO 10 0.40384615 0.057596372 LUKE 15 0.44680851 0.297278912 DARTH VADER 5 0.32812500 0.011904762 CAMIE 2 0.32307692 0.000000000 BIGGS 7 0.36842105 0.032142857 LEIA 12 0.42000000 0.217120181 BERU 4 0.35000000 0.005442177 OWEN 3 0.32812500 0.000000000 OBI-WAN 7 0.38181818 0.014852608 MOTTI 3 0.31343284 0.000000000 TARKIN 3 0.31343284 0.000000000 HAN 8 0.38888889 0.176190476 GREEDO 1 0.28767123 0.000000000 JABBA 1 0.28767123 0.000000000 DODONNA 5 0.34426230 0.011111111 GOLD LEADER 5 0.33870968 0.003174603 WEDGE 5 0.33870968 0.003174603 RED LEADER 7 0.36842105 0.032142857 RED TEN 2 0.32307692 0.000000000 GOLD FIVE 0 0.04545455 0.000000000 > > tmp[order(-g.c.clo, -g.c.bet),] g.c.deg g.c.clo g.c.bet LUKE 15 0.44680851 0.297278912 LEIA 12 0.42000000 0.217120181 C-3PO 10 0.40384615 0.057596372 HAN 8 0.38888889 0.176190476 CHEWBACCA 8 0.38888889 0.035487528 OBI-WAN 7 0.38181818 0.014852608 R2-D2 7 0.38181818 0.011904762 BIGGS 7 0.36842105 0.032142857 RED LEADER 7 0.36842105 0.032142857 BERU 4 0.35000000 0.005442177 DODONNA 5 0.34426230 0.011111111 GOLD LEADER 5 0.33870968 0.003174603 WEDGE 5 0.33870968 0.003174603 DARTH VADER 5 0.32812500 0.011904762 OWEN 3 0.32812500 0.000000000 CAMIE 2 0.32307692 0.000000000 RED TEN 2 0.32307692 0.000000000 MOTTI 3 0.31343284 0.000000000 TARKIN 3 0.31343284 0.000000000 GREEDO 1 0.28767123 0.000000000 JABBA 1 0.28767123 0.000000000 GOLD FIVE 0 0.04545455 0.000000000 > g.c.bac <- distances(g, v=V(g)["R2-D2"], to=V(g), weights=NA) g.c.bac > g.c.bac <- distances(g, v=V(g)["R2-D2"], to=V(g), weights=NA) > g.c.bac R2-D2 CHEWBACCA C-3PO LUKE DARTH VADER CAMIE BIGGS LEIA BERU OWEN OBI-WAN MOTTI R2-D2 0 1 1 1 2 2 2 1 2 2 1 2 TARKIN HAN GREEDO JABBA DODONNA GOLD LEADER WEDGE RED LEADER RED TEN GOLD FIVE R2-D2 2 1 2 2 1 2 2 2 2 Inf