Packages we will use:
First create a dataframe with the two actors in the dyad.
countries_df <- data.frame(stateA = ww1_df$statea, stateB = ww1_df$stateb, stringsAsFactors = TRUE)
Next, convert to matrix so it is suitable for the next function
countries_matrix <- as.matrix(countries_df)
Feed the matrix into the
graph.edgelist() function. We can see that it returns an
countries_ig <- graph.edgelist(countries_matrix , directed=TRUE)
“Nodes” designate the vertices of a network, and “edges” designate its ties. Vertices are accessed using the V() function while edges are accessed with the E(). This
igraph object has 232 edges and 16 vertices over the four years.
igraph object has a name attribute as one of its vertices properties. To access, type:
Which prints off all the countries in the ww1 dataset; this is all the countries that engaged in militarized interstate disputes between the years 1914 to 1918.
 "United Kingdom" "Austria-Hungary" "France" "United States" "Russia" "Romania" "Germany" "Greece" "Yugoslavia"  "Italy" "Belgium" "Turkey" "Bulgaria" "Portugal" "Estonia" "Latvia"
Next we can fit an algorithm to modify the graph distances. According to our pal Wikipedia, force-directed graph drawing algorithms are a class of algorithms for drawing graphs in an aesthetically-pleasing way. Their purpose is to position the nodes of a graph in two-dimensional or three-dimensional space so that all the edges are of more or less equal length and there are as few crossing edges as possible, by assigning forces among the set of edges and the set of nodes, based on their relative positions!
We can do this in one simple step by feeding the igraph into the algorithm function.
Check out this blog post to see the differences between these distance algorithms.
I will choose the Kamada-Kawai algorithm.
kamada_layout <- layout.kamada.kawai(countries_ig)
Now to plot the WW1 countries and their war dispute networks
layout = kamada_layout,
vertex.size = 14,
vertex.color = "red",
vertex.frame.color = NA,
vertex.label.cex = 1.2,
edge.curved = .2,
edge.arrow.size = .3,
edge.width = 1)