0

I am currently in the process of visualizing diplomatic relations between the world's countries conditioned on the placement of diplomatic mission e.g. embassies.

The data I use can be located in a reproducible way at the following web-address: http://www.correlatesofwar.org/data-sets/diplomatic-exchange

The variables in this dataset are as follows:

  • ccode1: state number of country 1
  • ccode2: state number of country 2
  • year - Year of observation
  • DR_at_1 - Diplomatic representation level of side 2 at side 1 (see below)
  • DR_at_2 - Diplomatic representation level of side 1 at side 2 (see below)
  • DE - Any diplomatic exchange between side 1 and side 2 (see below)
  • version - Current version of the data set

Below you will find an extract of the adjacency table that shows diplomatic connections between countries as well as data for longitude and latitude for each country in a separate dataframe. Please note that the connections between the countries are hypothetical while the geographic data is accurate.

                         country1
country2   1'    2'      3'       4'      5'    6'    
1          0     1       0        0       0     0   
2          1     0       1        0       0     0   
3          0     0       0        0       1     1   
4          1     0       1        0       1     1   
5          0     1       0        0       0     1   
6          0     0       1        0       1     0   

Countryno.  Country       x (lat)   y (long) 
1           Afghanistan   66.004    33.835     
2           Australia     134.49    -25.73288
3           Belgium       4.64      50.6398  
4           Austria       14.121    47.585
5           Bangladesh    90.238    23.860
6           Belarus       28.03     53.5310  

You can import the data using the following dput functions:

Geographic data:

World_df <- structure(list(Country = c("Aruba", "Afghanistan", "Angola", 
"Anguilla", "Albania", "Aland", "Andorra", "United Arab Emirates", 
"Argentina", "Armenia", "American Samoa", "Antarctica", "Ashmore and Cartier Islands", 
"French Southern and Antarctic Lands", "Antigua and Barbuda", 
"Australia", "Austria", "Azerbaijan", "Burundi", "Belgium", "Benin", 
"Burkina Faso", "Bangladesh", "Bulgaria", "Bahrain", "The Bahamas", 
"Bosnia and Herzegovina", "Saint Barthelemy", "Belarus", "Belize", 
"Bermuda", "Bolivia", "Brazil", "Barbados", "Brunei", "Bhutan", 
"Botswana", "Central African Republic", "Canada", "Switzerland", 
"Chile", "China", "Ivory Coast", "Cameroon", "Democratic Republic of the Congo", 
"Republic of the Congo", "Cook Islands", "Colombia", "Comoros", 
"Cape Verde", "Costa Rica", "Cuba", "Curacao", "Cayman Islands", 
"Northern Cyprus", "Cyprus", "Czech Republic", "Germany", "Djibouti", 
"Dominica", "Denmark", "Dominican Republic", "Algeria", "Ecuador", 
"Egypt", "Eritrea", "Spain", "Estonia", "Ethiopia", "Finland", 
"Fiji", "Falkland Islands", "France", "Faroe Islands", "Federated States of Micronesia", 
"Gabon", "Gaza", "United Kingdom", "Georgia", "Guernsey", "Ghana", 
"Guinea", "Gambia", "Guinea Bissau", "Equatorial Guinea", "Greece", 
"Grenada", "Greenland", "Guatemala", "Guam", "Guyana", "Hong Kong S.A.R.", 
"Heard Island and McDonald Islands", "Honduras", "Croatia", "Haiti", 
"Hungary", "Indonesia", "Isle of Man", "India", "Indian Ocean Territories", 
"British Indian Ocean Territory", "Ireland", "Iran", "Iraq", 
"Iceland", "Israel", "Italy", "Jamaica", "Jersey", "Jordan", 
"Japan", "Siachen Glacier", "Kazakhstan", "Kenya", "Kyrgyzstan", 
"Cambodia", "Kiribati", "Saint Kitts and Nevis", "South Korea", 
"Kosovo", "Kuwait", "Laos", "Lebanon", "Liberia", "Libya", "Saint Lucia", 
"Liechtenstein", "Sri Lanka", "Lesotho", "Lithuania", "Luxembourg", 
"Latvia", "Macau S.A.R", "Saint Martin", "Morocco", "Monaco", 
"Moldova", "Madagascar", "Maldives", "Mexico", "Marshall Islands", 
"Macedonia", "Mali", "Malta", "Myanmar", "Montenegro", "Mongolia", 
"Northern Mariana Islands", "Mozambique", "Mauritania", "Montserrat", 
"Mauritius", "Malawi", "Malaysia", "Namibia", "New Caledonia", 
"Niger", "Norfolk Island", "Nigeria", "Nicaragua", "Niue", "Netherlands", 
"Norway", "Nepal", "Nauru", "New Zealand", "Oman", "Pakistan", 
"Panama", "Pitcairn Islands", "Peru", "Philippines", "Palau", 
"Papua New Guinea", "Poland", "Puerto Rico", "North Korea", "Portugal", 
"Paraguay", "French Polynesia", "Qatar", "Romania", "Russia", 
"Rwanda", "Western Sahara", "Saudi Arabia", "Sudan", "South Sudan", 
"Senegal", "Singapore", "South Georgia and South Sandwich Islands", 
"Saint Helena", "Solomon Islands", "Sierra Leone", "El Salvador", 
"San Marino", "Somaliland", "Somalia", "Saint Pierre and Miquelon", 
"Republic of Serbia", "Sao Tome and Principe", "Suriname", "Slovakia", 
"Slovenia", "Sweden", "Swaziland", "Sint Maarten", "Seychelles", 
"Syria", "Turks and Caicos Islands", "Chad", "Togo", "Thailand", 
"Tajikistan", "Turkmenistan", "East Timor", "Tonga", "Trinidad and Tobago", 
"Tunisia", "Turkey", "Taiwan", "United Republic of Tanzania", 
"Uganda", "Ukraine", "Uruguay", "United States of America", "Uzbekistan", 
"Vatican", "Saint Vincent and the Grenadines", "Venezuela", "British Virgin Islands", 
"United States Virgin Islands", "Vietnam", "Vanuatu", "West Bank", 
"Wallis and Futuna", "Samoa", "Yemen", "South Africa", "Zambia", 
"Zimbabwe", "Tuvalu", "French Guiana"), x = c(-69.98267466, 66.00473115, 
17.53736149, -63.06498464, 20.04983034, 19.95324636, 1.56053368, 
54.30015737, -65.17980881, 44.9299343, -170.7180186, 19.92113271, 
123.58383039, 69.22673416, -61.7946956, 134.49099877, 14.12647809, 
47.54599646, 29.8751201, 4.64064572, 2.32784527, -1.7545684, 
90.23812793, 25.21552327, 50.54197759, -76.62835738, 17.76876588, 
-62.84068712, 28.03208711, -88.71010228, -64.75454185, -64.6853892, 
-53.09783199, -59.55980198, 114.72202554, 90.401895, 23.7985373, 
20.46826364, -98.30775723, 8.20866006, -71.38255879, 103.81907385, 
-5.56921598, 12.73964266, 23.64395637, 15.21965722, -159.7872415, 
-73.08114936, 43.68238096, -23.95990969, -84.19208786, -79.01606913, 
-68.9712225, -80.91213058, 33.5684401, 33.00600358, 15.31240065, 
10.38577693, 42.56067681, -61.35773122, 10.02799418, -70.50569086, 
2.61732102, -78.75203573, 29.8618993, 38.84615444, -3.64754874, 
25.54248555, 39.6008014, 26.27467024, 165.45055475, -59.35240055, 
2.53618475, -6.88096322, 153.23706115, 11.78863005, 34.34757119, 
-2.86563362, 43.50778995, -2.57240158, -1.21676901, -10.94066379, 
-15.39601809, -14.94972941, 10.34138898, 22.95556207, -61.68219415, 
-41.34191035, -90.36482288, 144.76792243, -58.98202596, 114.11379862, 
73.52052712, -86.61516846, 16.40413079, -72.68527364, 19.39559381, 
117.24009764, -4.53873822, 79.61197355, 104.84946519, 72.44540239, 
-8.13793167, 54.27407071, 43.74353204, -18.57397086, 35.00444995, 
12.07000946, -77.31482556, -2.12687655, 36.77137251, 138.03089212, 
77.18011287, 67.29149657, 37.79594437, 74.54165548, 104.90694312, 
-45.6220913, -62.68754242, 127.83916926, 20.87249613, 47.58699362, 
103.73772128, 35.88016327, -9.32207781, 18.00865782, -60.96969329, 
9.53573593, 80.70107795, 28.22722773, 23.88720035, 6.07182681, 
24.9123704, 113.50933102, -63.05971623, -8.45616045, 7.40628055, 
28.45673742, 46.70473751, 73.45711081, -102.52345042, 170.33963635, 
21.68211343, -3.54268794, 14.40522042, 96.48843207, 19.2388382, 
103.05299651, 145.61961878, 35.53367351, -10.3477974, -62.18519807, 
57.57120758, 34.2893585, 109.69761552, 17.20962769, 165.68492075, 
9.38546454, 167.94920199, 8.08944243, -85.03052894, -169.8699537, 
5.2814735, 15.34832968, 83.9158367, 166.93258517, 171.48495391, 
56.09165967, 69.33958027, -80.11915152, -128.31704094, -74.38242889, 
122.88392153, 134.40822154, 145.20744918, 19.39011841, -66.47307314, 
127.19247812, -8.50105506, -58.40014084, -144.90488761, 51.18478512, 
24.97293286, 96.68657347, 29.91989113, -12.2198297, 44.53687041, 
29.94047226, 30.24790056, -14.47348904, 103.8172532, -36.43320448, 
-9.54768684, 159.63284711, -11.79271209, -88.87164456, 12.45923029, 
46.2519833, 45.70716243, -56.30319339, 20.78958121, 6.72429635, 
-55.91234833, 19.47905212, 14.8044464, 16.74371219, 31.48193159, 
-63.05713283, 55.47601997, 38.50787939, -71.97385725, 18.64493211, 
0.96232118, 101.00288352, 71.01363312, 59.37099935, 125.84438644, 
-174.80975436, -61.26565805, 9.55288287, 35.16895529, 120.95427264, 
34.81310214, 32.36907536, 31.38325794, -56.01806795, -112.46167057, 
63.14001799, 12.43386255, -61.20129438, -66.18184085, -64.47140241, 
-64.80300497, 106.29913857, 167.68636735, 35.24782134, -177.34813306, 
-172.16481475, 47.58676005, 25.08388384, 27.77475082, 29.85145031, 
178.51989487, -53.2484462), y = c(12.52088881, 33.83523216, -12.29336112, 
18.22396692, 41.14245128, 60.21490035, 42.54229174, 23.90527175, 
-35.38135347, 40.28952206, -14.30448922, -80.50856414, -12.42994255, 
-49.24895992, 17.27754256, -25.73288736, 47.58549847, 40.28827674, 
-3.35939257, 50.63981435, 9.6417533, 12.26953681, 23.86730412, 
42.76889988, 26.04200845, 24.29031222, 44.17449912, 17.89881045, 
53.53131155, 17.20027475, 32.31368594, -16.70814536, -10.78777567, 
13.18145371, 4.51968241, 27.4110619, -22.18402031, 6.56823003, 
61.36206827, 46.79785296, -37.73069754, 36.56176801, 7.62842868, 
5.69110296, -2.87746013, -0.83788172, -21.21926813, 3.91383156, 
-11.87777573, 15.95518822, 9.9763424, 21.62290023, 12.19552443, 
19.42896455, 35.2627605, 34.91666932, 49.73341073, 51.10697903, 
11.74872052, 15.43947211, 55.98126391, 18.8943308, 28.15893844, 
-1.42381949, 26.49593108, 15.36186881, 40.24448626, 58.67192416, 
8.62278417, 64.49884844, -17.4285609, -51.7448299, 46.18700581, 
62.05386227, 7.4528106, -0.58660329, 31.39150353, 54.12387156, 
42.16855944, 49.46809855, 7.95345124, 10.43621595, 13.44965377, 
12.04744454, 1.70554042, 39.07466973, 12.1172555, 74.71051369, 
15.69404158, 13.4416655, 4.79378052, 22.39828782, -53.08725301, 
14.82688225, 45.08047284, 18.93500961, 47.16277712, -2.21505018, 
54.2241965, 22.88578035, -10.64829627, -7.33058251, 53.1754426, 
32.57503287, 33.03970511, 64.99575263, 31.4611019, 42.79663568, 
18.15695476, 49.21837488, 31.24579389, 37.59230065, 35.39236619, 
48.15687954, 0.5998746, 41.46221785, 12.72004932, 0.86052252, 
17.26458594, 36.3852463, 42.57078418, 29.33431677, 18.50217971, 
33.92306993, 6.45278273, 27.03094247, 13.8947837, 47.13665447, 
7.61266309, -29.5800467, 55.32611078, 49.76724687, 56.85085306, 
22.22310807, 18.08889331, 29.83762793, 43.75276115, 47.19499323, 
-19.37189599, 3.72854733, 23.94753932, 7.00352799, 41.59531059, 
17.34581461, 35.92151315, 21.18566514, 42.7889115, 46.82681435, 
15.82873009, -17.27381898, 20.25736926, 16.73941361, -20.2777156, 
-13.2180697, 3.78987255, -22.13030791, -21.29990206, 17.41912605, 
-29.05143845, 9.59411807, 12.84709633, -19.0494623, 52.10080804, 
68.75014407, 28.24891362, -0.51914199, -41.81112825, 20.60515412, 
29.94975221, 8.5175119, -24.36498595, -9.15280281, 11.77539737, 
7.28760993, -6.46416276, 52.12759537, 18.22812711, 40.15350291, 
39.59550247, -23.22823896, -14.72228068, 25.30600936, 45.85242939, 
61.98052168, -1.99033199, 24.22956358, 24.12245467, 15.99035431, 
7.30877585, 14.36624381, 1.35877066, -54.46487151, -12.40367621, 
-8.92175696, 8.56329069, 13.73944008, 43.94186939, 9.73345795, 
4.75065195, 46.91919986, 44.22150308, 0.44390851, 4.13055377, 
48.70547175, 46.11555444, 62.79232016, -26.55842734, 18.05081813, 
-4.66097821, 35.02547248, 21.83047424, 15.33333336, 8.52529798, 
15.11816347, 38.53045125, 39.11554017, -8.8288854, -20.42814141, 
10.45735757, 34.11956663, 39.06160342, 23.75400343, -6.27565815, 
1.27469024, 48.99656784, -32.79951982, 45.67955203, 41.75554081, 
41.90174097, 13.22471841, 7.12422395, 18.52593375, 17.95501398, 
16.64601451, -16.22630588, 31.94798033, -13.88724988, -13.75327339, 
15.90927655, -29.0003377, -13.45824537, -19.00420587, -7.76005828, 
3.92595718), cwon = structure(list(`countrycode(World_df$Country, "country.name", "cown")` = c(NA, 
700L, 540L, NA, 339L, NA, 232L, 696L, 160L, 371L, NA, NA, NA, 
NA, 58L, 900L, 305L, 373L, 516L, 211L, 434L, 439L, 771L, 355L, 
692L, 31L, 346L, NA, 370L, 80L, NA, 145L, 140L, 53L, 835L, 760L, 
571L, 482L, 20L, 225L, 155L, 710L, 437L, 471L, 490L, 484L, NA, 
100L, 581L, 402L, 94L, 40L, NA, NA, 352L, 352L, 316L, 255L, 522L, 
54L, 390L, 42L, 615L, 130L, 651L, 531L, 230L, 366L, 530L, 375L, 
950L, NA, 220L, NA, 987L, 481L, NA, 200L, 372L, NA, 452L, 438L, 
420L, 404L, 411L, 350L, 55L, NA, 90L, NA, 110L, NA, NA, 91L, 
344L, 41L, 310L, 850L, NA, 750L, NA, NA, 205L, 630L, 645L, 395L, 
666L, 325L, 51L, NA, 663L, 740L, NA, 705L, 501L, 703L, 811L, 
946L, 60L, 732L, 347L, 690L, 812L, 660L, 450L, 620L, 56L, 223L, 
780L, 570L, 368L, 212L, 367L, NA, NA, 600L, 221L, 359L, 580L, 
781L, 70L, 983L, 343L, 432L, 338L, 775L, 341L, 712L, NA, 541L, 
435L, NA, 590L, 553L, 820L, 565L, NA, 436L, NA, 475L, 93L, NA, 
210L, 385L, 790L, 970L, 920L, 698L, 770L, 95L, NA, 135L, 840L, 
986L, 910L, 290L, NA, 731L, 235L, 150L, NA, 694L, 360L, 365L, 
517L, NA, 670L, 625L, 626L, 433L, 830L, NA, NA, 940L, 451L, 92L, 
331L, 520L, 520L, NA, NA, 403L, 115L, 317L, 349L, 380L, 572L, 
NA, 591L, 652L, NA, 483L, 461L, 800L, 702L, 701L, 860L, 955L, 
52L, 616L, 640L, 713L, 510L, 500L, 369L, 165L, 2L, 704L, 327L, 
57L, 101L, NA, NA, 817L, 935L, NA, NA, 990L, 679L, 560L, 551L, 
552L, 947L, NA)), row.names = c(NA, -244L), class = "data.frame")), row.names = c(NA, 
-244L), class = "data.frame")

Adjacency matrix:

Network_Matrix_2005 <- structure(c(0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 
1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 
1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 
1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 
0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 
1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 
0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 
0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
1, 1, 1, 1, 0), .Dim = c(20L, 20L), .Dimnames = list(c("2", "20", 
"31", "40", "41", "42", "51", "52", "53", "54", "55", "56", "57", 
"58", "60", "70", "80", "90", "91", "92"), c("2", "20", "31", 
"40", "41", "42", "51", "52", "53", "54", "55", "56", "57", "58", 
"60", "70", "80", "90", "91", "92")))

In case my current dataformat is suboptimal you can find the code I have used to convert the original data below:

DiploData <- Diplomatic_Exchange_2006v1

Connected_countries <- DiploData %>% group_by(year) %>% summarise(Frequency = sum(DE))

DiploData_2005 <- DiploData %>%
filter(year == 2005)

edges <- DiploData_2005[DiploData_2005$DR_at_1 > 0 | DiploData_2005$DR_at_2 > 0,]
edges <- cbind(as.character(edges$ccode1), as.character(edges$ccode2))
edges <- rbind(edges, edges[,2:1])

codes <- unique(c(DiploData_2005$ccode1, DiploData_2005$ccode2))
Network_Matrix_2005 <- matrix(0, nrow=length(codes), ncol = length(codes), dimnames=list(codes, codes))
Network_Matrix_2005[edges] <- 1

The values of the adjacency table are based on whether country 2/1 has any diplomatic representation in country 1/2 (DR_at_1 > 0 or DR_at_2 > 0).

I now want the nodes to be displayed on a world map.

I have until now constructed a dataframe that contains longitude, latitude and converted the country codes to be consistent with the ones used in the original data (Diplomatic_Exchange_2006v1) using the following code:

wmap <- getMap(resolution="high")
centroids <- gCentroid(wmap, byid=TRUE)
World_df <- as.data.frame(centroids)
World_df <- tibble::rownames_to_column(World_df, var = "Country")
World_df$cwon <- as.data.frame(countrycode(World_df$Country, 'country.name', 'cown'))

I expect that a solution could be similar to the one you find on the following link: https://www.r-bloggers.com/three-ways-of-visualizing-a-graph-on-a-map/

For your information, I am using the following packages:

library(ggplot2)
library(ggthemes)
library(dplyr)
library(tidyverse)
library(igraph)
library(GGally)
library(network)
library(sna)
library(countrycode)
library(assertthat)
library(purrr)
library(ggraph)
library(ggmap)
library(rworldmap)
  • 1
    This would be a much better question if you made it **minimally** reproducible - you'll get help much faster if you provide, say 5-10 rows of copy/pasteable data, and *only* list the packages that *are used in the question*. The way your question currently is, *before* trying to answer it I would need to install 5 packages I don't have, go to a website to download data, copy it to my working directory, read it in to R, and then I'm ready to start running your code. Please do a little bit more work to make it easier on answerers, \using `dput()` to provide a small copy/pasteable bit of data. – Gregor Thomas Nov 16 '19 at 16:04
  • Thank you for your input. I have now added a small extract of the data that will hopefully make the work as easy as possible for the answerers. The reason I provided the rest of the code in the question is that I have doubts that the current format is optimal for solving the task. – Fredwindfeld Nov 21 '19 at 10:44
  • 1
    Would you mind sharing the data with `dput()`? Then it would be copy/pasteable. I'm not sure what class the adjacency table is, it looks like it might be a `matrix` or `table`. And the `'` in the column names make the names non-standard, so difficult to import. The data frame is better, but the spaces and parens in the column names also make it difficult to import. And it would be nice to know if the `Country` column is `character` or `factor` (and to check the other column classes). If you share the data with `dput`, all of this extra info is included automatically. – Gregor Thomas Nov 22 '19 at 05:02
  • 1
    [See this FAQ](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) for additional tips about making nice reproducible examples in R. – Gregor Thomas Nov 22 '19 at 05:02
  • I have now inserted the data with dput. Please let me know if there is anything further that will clarify and make the data easier to manage for an answerer. – Fredwindfeld Nov 25 '19 at 08:36

0 Answers0