Files
visual-data/VT2-examples/vt2-ch6-codedata-dir/make-network-graph.R
T

98 lines
2.5 KiB
R

# install.packages("igraph")
library(igraph)
# Empty graph
g <- make_empty_graph(directed=FALSE)
#
# Add vertices
#
g <- g %>% add_vertices(1, color="#a3b8a3", size=50)
g <- g %>% add_vertices(1, color = "#d7c668", size=50)
g <- g %>% add_vertices(10, color = "#cccccc", size=20)
plot(g)
#
# Add edges (to connect vertices)
#
# Connect the two first vertices
g <- g %>% add_edges(c(1,2), weight=0.01, color="#cccccc")
plot(g)
# Connect 8 to 10 and 7
g <- g %>% add_edges(c(8,10, 8,7), weight=0.01, color="#cccccc")
plot(g)
# Connect 3, 4, and 5 to 1
g <- g %>% add_edges(c(3,1, 4,1, 5,1), weight=0.01, color="#cccccc")
plot(g)
# Connect 11 and 12 to 2 with more weight
g <- g %>% add_edges(c(12,2, 11,2), weight=1, color="#cccccc")
plot(g)
# Layouts
par(mfrow=c(2,2), mar=c(2,0,4,0))
plot(g, vertex.label=NA, layout=layout_with_fr, main="Force-directed")
plot(g, vertex.label=NA, layout=layout_on_grid, main="Grid")
plot(g, vertex.label=NA, layout=layout_in_circle, main="Circle")
plot(g, vertex.label=NA, layout=layout_nicely, main="Nicely")
#
# Example with more data: Job Switching Network
#
# Load data
occs <- read.csv("data/occ_codes.tsv", sep="\t")
occverts <- read.csv("data/occverts.csv")
occlinks <- read.csv("data/occlinks.csv")
occgrps <- unique(occverts$grp)
head(occverts)
head(occlinks)
# Subsetting and weights
occlinks$relwt <- occlinks$value / max(occlinks$value)
occlinks_sub <- occlinks[occlinks$relwt >= .01,]
occverts_sub <- occverts[occverts$id %in% occlinks_sub$source | occverts$id %in% occlinks_sub$target,]
# Vertices colors
occverts_sub$color <- colors()[match(occverts_sub$grp, occgrps)*2]
# Form the graph
g <- make_empty_graph(directed=FALSE)
g <- g %>%
add_vertices(dim(occverts_sub)[1], color=occverts_sub$color, size=sqrt(occverts_sub$nwt)/10) %>%
set_vertex_attr("occid", value = occverts_sub$id) %>%
set_vertex_attr("grp", value = occverts_sub$grp)
# Get id of added vertices
occverts_sub$vid <- match(occverts_sub$id, V(g)$occid)
occverts_sub$name <- occs$name[match(occverts_sub$id, occs$code)]
g <- g %>% set_vertex_attr("name", value = occverts_sub$name)
# Join ids
occlinks_sub$vid_source <- occverts_sub$vid[match(occlinks_sub$source, occverts_sub$id)]
occlinks_sub$vid_target <- occverts_sub$vid[match(occlinks_sub$target, occverts_sub$id)]
# Add edges
for (i in 1:dim(occlinks_sub)[1]) {
g <- g %>% add_edges(c(occlinks_sub$vid_source[i], occlinks_sub$vid_target[i]),
weight=occlinks_sub$relwt[i]*20,
color="#f0f0f0")
}
# Plot
plot(g, vertex.label = NA)