Maps are a powerful tool for presenting data. Because igoR focuses on intergovernmental organizations (IGOs), maps can help show how IGO membership changes across states and time.
This vignette provides geospatial visualizations using the IGO data sets (Pevehouse et al. 2020) included in this package. It uses these packages for geospatial data:
- giscoR package for extracting country shapefiles.
- ggplot2 package for plotting.
The countrycode package is useful for translating between country names and coding schemes such as COW, ISO3, NUTS and FIPS.
library(igoR)
# Helper packages.
library(dplyr)
library(ggplot2)
library(countrycode)
# Geospatial packages.
library(giscoR)
library(sf)Evolution of UN membership
The following map shows the evolution of United Nations membership. First, extract the membership data.
# Extract shapes.
world <- gisco_get_countries()
# Extract three years. Some COW codes do not have ISO equivalents.
un_all <- igo_members("UN", c(1950, 1980, 2010), status = "Full Membership") %>%
# Add the ISO3 code.
mutate(ISO3_CODE = countrycode(ccode, "cown", "iso3c", warn = FALSE)) %>%
select(year, orgname, ISO3_CODE, category)
# Build an auxiliary data frame to collect every ISO3-year pair.
base_df <- expand.grid(
ISO3_CODE = unique(world$ISO3_CODE),
year = unique(un_all$year),
stringsAsFactors = FALSE
) %>%
as_tibble()
# Merge everything with the spatial object.
un_all_sf <- world %>%
# Expand to all cases.
left_join(base_df, by = "ISO3_CODE") %>%
# Add information.
left_join(un_all, by = c("ISO3_CODE", "year"))The map is not completely accurate because the base shapefile contains countries that existed in 2016. Some historical states, such as Czechoslovakia, East Germany and West Germany, are not included.
The data are now ready to plot with ggplot2.
ggplot(un_all_sf) +
geom_sf(aes(fill = category), color = NA, show.legend = FALSE) +
# Robinson
coord_sf(crs = "ESRI:54030") +
facet_wrap(~year, ncol = 1, strip.position = "left") +
scale_fill_manual(
values = c("Full Membership" = "#74A9CF"),
na.value = "#E0E0E0",
) +
labs(
title = "UN members",
caption = gisco_attributions(),
) +
theme_minimal() +
theme(
plot.caption = element_text(face = "italic", hjust = 0.15),
axis.line = element_blank(),
axis.text = element_blank()
)
UN members (1950, 1980, 2010)
Number of shared memberships
Shared memberships are useful for identifying regional patterns. The following code maps how many full memberships each state shared with Australia in 2014.
# Count shared IGOs in 2014.
# Find states in the state system in 2014.
states2014 <- states2016 %>%
filter(styear <= 2014 & endyear >= 2014)
# Find shared memberships with Australia.
shared <- igo_dyadic("AUL", as.character(states2014$statenme), year = 2014) %>%
rowwise() %>%
mutate(shared = sum(c_across(aaaid:wassen) == 1)) %>%
mutate(ISO3_CODE = countrycode(ccode2, "cown", "iso3c", warn = FALSE)) %>%
select(ISO3_CODE, shared)
# Merge with the map.
sharedmap <- world %>%
left_join(shared, by = "ISO3_CODE") %>%
select(ISO3_CODE, shared)
# Plot with a custom palette.
pal <- hcl.colors(10, palette = "Lajolla")
# Plot the results.
ggplot(sharedmap) +
geom_sf(aes(fill = shared), color = NA) +
# Highlight Australia.
geom_sf(
data = sharedmap %>% filter(ISO3_CODE == "AUS"),
fill = "black",
color = NA,
) +
# Robinson
coord_sf(crs = "ESRI:54030") +
scale_fill_gradientn(colours = pal, n.breaks = 10) +
guides(fill = guide_legend(nrow = 1)) +
labs(
title = "Shared full memberships with Australia (2014)",
fill = "Number of IGOs shared",
caption = gisco_attributions()
) +
theme_minimal() +
theme(
plot.title = element_text(face = "bold", hjust = 0.5),
plot.caption = element_text(face = "italic", size = 7, hjust = 0.15),
axis.line = element_blank(),
axis.text = element_blank(),
legend.title = element_text(size = 7),
legend.text = element_text(size = 8),
legend.position = "bottom",
legend.direction = "horizontal",
legend.title.position = "top",
legend.text.position = "bottom",
legend.key.width = unit(1.5, "lines"),
legend.key.height = unit(0.5, "lines")
)
Shared full memberships with Australia (2014)
Cross-shared memberships
The following map shows how joint memberships between North American states changed over the last 90 years, with one year representing each decade.
# Select years.
years <- seq(1930, 2010, 10)
# Find shared memberships.
cntries <- c("USA", "CAN", "MEX")
all <- igo_dyadic(cntries, cntries, years) %>%
rowwise() %>%
mutate(value = sum(c_across(aaaid:wassen) == 1)) %>%
mutate(ISO3_CODE = countrycode(ccode1, "cown", "iso3c")) %>%
select(ISO3_CODE, year, value)
# Get shapes for the map.
countries_sf <- gisco_get_countries(country = c("USA", "MEX", "CAN")) %>%
left_join(all, by = "ISO3_CODE")
# Plot the map.
ggplot(countries_sf) +
geom_sf(aes(fill = value), color = NA) +
coord_sf(crs = 9311, xlim = c(-3200000, 3333018)) +
facet_wrap(~year, ncol = 3) +
scale_fill_gradientn(
colors = hcl.colors(10, "YlGn", rev = TRUE),
breaks = seq(0, 100, 5)
) +
guides(fill = guide_legend(reverse = TRUE)) +
labs(
title = "Shared full memberships in North America",
subtitle = "(1930-2010)",
fill = "Shared IGOs",
caption = gisco_attributions()
) +
theme_minimal() +
theme(
panel.grid = element_blank(),
axis.line = element_blank(),
axis.text = element_blank(),
strip.background = element_rect(fill = "grey90", colour = NA)
)
Shared full memberships in North America (1930-2010)
