The first graph shown here presents the average polity score for all countries included within the Varieties of Democracy Dataset from 1990 to 2018 (the most recent year included in the dataset for this variable) categorized by continent. The Polity measure is a measure of regime type put out by the Center for Systemic Peace ranked from completely autocratic (-10) to completely democratic (10). Interestingly, the graph below shows an increasing score in recent years across most regions, with others such as the Americas largely remaining stable. This seemingly contradicts Freedom House’s claim of a “democracy deficit” (Freedom House 2025). However, polity scores may well have dropped off in more recent years not included in this dataset.
The second graph gives a bit better of a picture of the changing state of democracy in the world from 1990 to 2018 through showing the change in percentage of the world’s population living in autocracies, anocracies, and democracies over time. For the purposes of this visualization, I have converted the Polity regime type measurement into three buckets: Autocracy, Anocracy, and Democracy, corresponding to Polity scores of -5 and lower, between -4 and 4, and 5 and higher respectively. Much like the first graph, this animated column chart seeming contradicts Freedom Houses’s claim of a democracy deficit. However, the percentage of people living in anocracies (countries neither democratic nor autocratic) has increased considerably over time. When combined with autocracies, the number of people living in non-democratic regimes is over a third of the world’s population, showing there is still a lot of importance in understanding the spread of the repressive practices between these non-democratic regimes.
# Used the following external resources: https://www.r-bloggers.com/2022/07/adding-continent-and-country-names-with-countrycode-and-subsetting-a-data-frame-using-sample/
# https://www.sthda.com/english/wiki/ggplot2-axis-ticks-a-guide-to-customize-tick-marks-and-labels
ggplot(vdem |> group_by(year, continent) |> summarise(e_p_polity = mean(e_p_polity, na.rm=T)) |> na.omit()) +
aes(x=year, y=e_p_polity, color=continent) + geom_line(size=1.5) + theme_minimal() +
labs(x="Year", y="Polity Score (-10 to 10)", title="Average Polity Score by Continent 1990-2018", color="Continent") +
ylim(c(-10,10)) + scale_x_continuous(breaks=seq(1990, 2018, 4)) +
theme(text=element_text(size=30))library(gganimate)
vdem2 <- vdem |>
select(country_name, year, e_p_polity, e_pop) |>
mutate(
polity_basic = case_when(
e_p_polity <= -5 ~ "Autocracy",
e_p_polity > -5 & e_p_polity < 5 ~ "Anocracy",
e_p_polity >= 5 ~ "Democracy"
)) |> group_by(polity_basic, year) |>
filter(year > 1990) |>
summarise(pops = sum(e_pop, na.rm = T)) |>
group_by(year) |>
mutate(total_pop = sum(pops), prop = pops/total_pop) |>
mutate(polity_basic = factor(polity_basic, levels=c("Autocracy", "Anocracy", "Democracy")))
p <- ggplot(vdem2) +
aes(x=polity_basic, y=prop*100) +
geom_bar(stat="identity", position="stack") +
labs(x="Year", y="Polity Score (-10 to 10)", title="Average Polity Score by Continent 2017") +
ylim(c(0,100)) +
geom_text(aes(label = paste0(round(prop*100), "%")),
size=11,
position = position_dodge(width = 0.9),
vjust = -0.25) +
transition_states(year, transition_length=0, state_length=1) +
labs(title="Percentage of Population Living in Each Regime Type in Year: {closest_state}",
x="Regime Type",
y="Percent of World Population") +
theme_minimal() +
theme(text=element_text(size=30))
knitr::include_graphics("p_other.gif")# The Graph refused to show up when rendering using just the animate function, so I had to save the animation and include it separately. You can uncomment and run the code below to produce the same animation.
# animate(p,
# nframes=100,
# fps=3,
# start_pause = 10,
# end_pause=40,
# width=3500,
# height=1200)
#
# anim_save("p_other.gif")The first plot shown here shows the number of international trips carried out by a country’s head of state with another country’s head of state separated by continent from 1990-2024. As the graph shows, the majority of visits occured between countries on the same continent (i.e., USA to Canada, Germany to France, etc.). A considerable portion also occured between Asia and Europe, as well as Asia and Africa, showing some of the prominent inter-regional links between country leadership. Data used in this plot were aggregated from the COLT dataset.
The second visualization shows a map which is colored to show the number of times each country was visited by foreign Heads of State in the year 2024. Countries with high numbers of visits by foreign Heads of State include places such as France, China, and Germany. A large number of countries had either 0 or close to 0 visits by Heads of State in 2024, including much of Africa and parts of the Middle East. France stands as the most visited country in the world in 2024, with 100 visits. This seems to relate partially to multiple multilateral events hosted on French soil in 2024. Though not pictured in this graph, some of the events include: The Global Forum for Vaccine Sovereignty and Innovation, The Organisation Internationale de la Francophonie, The Sport for Sustainable Development Summit, and more.
Head of State Visits by Destination and Origin Continent : 1990-2024
The first graph is a network diagram which shows the visit habits of leaders in the Russian led Collective Security Treaty Organization (CSTO) in 2018. I chose to picture the CSTO here because of the relative diversity in regime type of its member states (between, at the most extreme levels, democratic Armenia at a polity score of 7 in 2018 and authoritarian Belarus at -7 in 2018). Although many of the countries most heavily visited are other CSTO members, Armenia distinguishes itself in visiting primarily western democracies. Perhaps this trend has been influenced by Armenia’s gradual pivot to the west under Prime Minister Nikol Pashinyan. The largest number of trips appears to have been from Belarus to Russia, which is not surprising given how close Belorussian leader Alexander Lukashenko is with Russian leader Vladimir Putin. Although this graph alone cannot make any broader claims regarding authoritarian learning, the trips pictured here may give some idea as to routes of spread of authoritarian ideas in this strategically important region.
The second graph shown here shows the average polity scores for places visited by countries at each level of the polity score ranking (based on country leader visit data from the COLT dataset). As can be seen, less free countries tend to visit other non-free countries and free countries tend to visit other free countries. Interestingly however, the relationship is not perfectly clear cut. Countries at the lowest polity score possible (-10, complete autocracy) visited countries with an average polity score of just slightly above 0, or about equally distant from both complete autocracy and complete democracy. It is, likewise, interesting that countries with a polity score of -7 and beyond visited countries with an average polity score of above 0 (more democratic leaning). Taken together, this seemingly indicates that autocracies, in spite of their domestic repression, frequently visit democracies or anocracies (countries that are neither purely democratic nor autocratic). Perhaps this relates to autocracies having many democratic wealthy trading partners, such as the United States or other western countries. That is, however, beyond the scope of this visualization to assess.
The third graph is an animated column chart shows the number of times heads of state of countries visited other countries broken out by both host and visited country regime type. As was done earlier in showing percentage of the world’s population in in different regime types over time, I have converted the Polity regime type measurement into three buckets: Autocracy, Anocracy, and Democracy, corresponding to Polity scores of -5 and lower, between -4 and 4, and 5 and higher respectively. This animation shows that the vast majority of visits took place between heads of state of democracies with heads of state of other democracies. Leaders of autocracies seemed to visit other countries less frequently than those of anocracies or democracies and were pretty divided between visits to democracies, anocracies, and other autocracies. It is possible that these differences in head of state visiting habits in differing regime types may relate to factors not captured in this visualization, such as differences in economic linkages or military cooperation between countries across regime types.
library(networkD3)
set.seed(10)
# I got the original idea for this visualization from the ChatGPT prompt: "What are some interesting possible visualization ideas related to authoritarian learning with country leader travel data and regime type data for the related countries?"
# Referenced the following resources for this plot: https://r-graph-gallery.com/package/ggraph.html
ggraph(g, layout = "fr") +
geom_edge_fan(aes(width = Countries),
alpha = 0.4,
arrow = arrow(length = unit(4, "mm")),
end_cap = circle(3, 'mm'),
show.legend = TRUE) +
geom_node_point(aes(color = polity),
size = 5) +
geom_node_text(aes(label = name),
repel = TRUE,
size = 8) +
scale_edge_width(range = c(0.2, 3), breaks=c(1,2,5)) +
labs(
title = "Visits Between CSTO Countries and Other Countries in 2018",
subtitle = "Lines thickness determined by number of visits, countries colored by regime type",
edge_width = "Number of visits",
color = "Regime type"
) +
theme_void() +
theme(
legend.position = "bottom",
text = element_text(size=30)
)ggplot(means) +
aes(x=host_e_p_polity, y=visited_polity) + geom_line(size=1.5) + theme_minimal() + labs(
x="Host Country Polity Score", y="Average Polity Score of Visited Countries", title="Average Polity Score in Visited Countries at each Polity Level", subtitle="1990-2018, All Countries"
) + theme(text=element_text(size=30))# Used the following external resources: https://stackoverflow.com/questions/74636143/how-to-add-n-labels-to-bar-plot-in-r,
#https://r-graph-gallery.com/288-animated-barplot-transition.html
p <- ggplot(auth4 |> mutate(host_e_p_polity_basic = factor(host_e_p_polity_basic, levels=c("Autocracy", "Anocracy", "Democracy")), visited_e_p_polity_basic = factor(visited_e_p_polity_basic, levels=c("Autocracy", "Anocracy", "Democracy")))) + aes(x=host_e_p_polity_basic, y=NVisits, fill=visited_e_p_polity_basic) + geom_bar(position="dodge", stat="identity") + geom_text(aes(label = round(NVisits)), size=11,
position = position_dodge(width = 0.9), vjust = -0.25) +
transition_states(TripYear, transition_length=0, state_length=1) + labs(title="Number of Head of State Visits by Regime Type in Year: {closest_state}", x="Host Country Regime Type", y="Number of Visits", fill="Visited Country Regime Type") + theme_minimal() + theme(text = element_text(size = 30))
# The Graph refused to show up when rendering using just the animate function, so I had to save the animation and include it separately. You can uncomment and run the code below to produce the same animation.
# animate(p,
# nframes=100,
# fps=3,
# start_pause = 10,
# end_pause=40,
# width=3500,
# height=1200)
#
# anim_save("p6.gif")
knitr::include_graphics("p6.gif")Fariss, C., Anders, T., Markowitz, J. & Barnum, M. (2021), ‘Replication Data for: New Estimates of Over 500 Years of Historic GDP and Population Data’.
Heydemann, Steven. 2024. “Authoritarian Learning.” In Oxford University Press. http://dx.doi.org/10.1093/oxfordhb/9780198871996.013.51.
Marshall, M. G., & Gurr, T. R. (2020). Polity v project, political regime characteristics and transitions, 1800-2018. Center for Systemic Peace.
Moyer, Jonathan D et al. 2025. “When Heads of Government and State (HOGS) Fly: Introducing the Country and Organizational Leader Travel (COLT) Dataset Measuring Foreign Travel by HOGS.” International Studies Quarterly 69(2). http://dx.doi.org/10.1093/isq/sqaf013.
“The Uphill Battle to Safeguard Rights.” 2025. Freedom House. https://freedomhouse.org/report/freedom-world/2025/uphill-battle-to-safeguard-rights (September 10, 2025).