Economist-Style Plot using R
Origin of the plot can be found here. This plot can be replicated by using R as follows:

R Codes for Data Cleaning and Visualization
Data can be downloaded here.
# Load data:
library(tidyverse)
dfRaw <- read_csv("/home/khanhan/Downloads/globalterrorismdb_0718dist.csv")
# Western Countries:
library(rvest)
read_html("http://worldpopulationreview.com/countries/western-countries/") %>%
html_nodes(xpath = '//*[@id="dataTable"]/div[1]/div/div/div/div/div[2]/table') %>%
html_table(fill = TRUE) %>%
.[[1]] %>%
slice(-1) %>%
rename(Country = X1, Pop = X2) -> western_df
# Add Greece and Israel:
westCountries <- c(western_df$Country, "Greece", "Israel")
# Select some columns and create a new column:
dfRaw %>%
select(iyear, country_txt, nkill, nkillter) %>%
filter(iyear %in% c(2000:2014)) %>%
mutate(nkill = replace_na(nkill, 0)) %>%
mutate(nkillter = replace_na(nkillter, 0)) %>%
mutate(totalDeath = nkill + nkillter) %>%
mutate(region = case_when(country_txt %in% c("Syria","Afghanistan","Pakistan") ~ "Syria, Afghanistan & Pakistan",
country_txt %in% westCountries ~ "Western Countries",
country_txt == "Iraq" ~ "Iraq",
country_txt == "Nigeria" ~ "Nigeria",
TRUE ~ "Others")) %>%
group_by(iyear, region) %>%
summarise(deaths = sum(totalDeath) / 1000) %>%
ungroup() -> dfPlot
# Total Deaths:
dfPlot %>%
mutate(region = "Rest of the World") %>%
group_by(iyear, region) %>%
summarise(deaths = sum(deaths)) %>%
ungroup() -> totalDeaths
# Remove Others:
dfPlot %>% filter(region != "Others") -> df_remaining
# Joint the two data sets:
df_for_ploting <- bind_rows(df_remaining, totalDeaths)
# Make a draft version:
ggplot() +
geom_line(data = totalDeaths, aes(x = iyear, y = deaths), size = 1.2) +
geom_area(data = totalDeaths, aes(x = iyear, y = deaths, fill = region)) +
geom_area(data = df_remaining, aes(x = iyear, y = deaths, fill = region), color = "white") +
labs(title = "The number of deaths from global terrorism, 2000-2014",
subtitle = "Deaths from global terrorism have increased dramatically over the last 15 years.\nThe number of deaths has increased elevenfold sine the year 2000",
caption = "Source: START, IEP") -> p
# Finalize our plot:
economistColors <- c("#7b2713", "#eb9e84", "#00a4dc", "#f15a40", "#00526d")
my_font <- "Ubuntu Condensed"
label_x <- c("2000", paste0("0", 1:9), 10:13, "2014")
label_y <- c(seq(0, 50, 10), "60K")
p +
theme_minimal(base_family = my_font) +
scale_fill_manual(values = economistColors) +
scale_y_continuous(breaks = seq(0, 60, 10), limits = c(0, 60), labels = label_y, expand = c(0, 0), position = "right") +
scale_x_continuous(breaks = seq(2000, 2014, 1), labels = label_x, expand = c(0, 0.3)) +
theme(panel.grid.major.x = element_blank()) +
theme(panel.grid.minor.x = element_blank()) +
theme(panel.grid.minor.y = element_blank()) +
theme(panel.grid.major.y = element_line(color = "darkgrey")) +
theme(legend.position = c(0.13, 0.71), legend.title = element_blank()) +
theme(legend.key.width = unit(25, "pt"), legend.key.height = unit(15, "pt")) +
theme(legend.text = element_text(margin = margin(l = 1), size = 13, color = "grey20")) +
theme(plot.margin = unit(rep(1, 4), "cm")) +
theme(axis.title = element_blank()) +
theme(axis.text = element_text(size = 13)) +
theme(plot.title = element_text(size = 26, color = "grey20")) +
theme(plot.subtitle = element_text(size = 15, color = "grey30")) +
theme(plot.caption = element_text(size = 12, colour = "grey30")) +
theme(legend.background = element_rect(fill = "white", size = 0))
library(grid)
grid.rect(x = 0.015, y = 0.91, hjust = 1, vjust = 0, gp = gpar(fill = "#e5001c", lwd = 0))
grid.rect(x = 1, y = 1 - 0.005, hjust = 1, vjust = 0, gp = gpar(fill = "#e5001c", lwd = 0))
LS0tCnRpdGxlOiAiR2xvYmFsIHRlcnJvcmlzbSwgMjAwMCAtIDIwMTQgKFZlcnNpb24gMSkiCmF1dGhvcjogJ05ndXllbiBDaGkgRHVuZycKc3VidGl0bGU6ICJEYWlseSBHcmFwaCBTZXJpZXMiCm91dHB1dDoKICBodG1sX2RvY3VtZW50OiAKICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKICAgICMgICBjb2RlX2ZvbGRpbmc6IGhpZGUKICAgIGhpZ2hsaWdodDogemVuYnVybgogICAgIyBudW1iZXJfc2VjdGlvbnM6IHllcwogICAgdGhlbWU6ICJmbGF0bHkiCiAgICB0b2M6IFRSVUUKICAgIHRvY19mbG9hdDogVFJVRQotLS0KCmBgYHtyIHNldHVwLGluY2x1ZGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UsIGZpZy53aWR0aCA9IDEwLCBmaWcuaGVpZ2h0ID0gNikKYGBgCgojIEVjb25vbWlzdC1TdHlsZSBQbG90IHVzaW5nIFIKCk9yaWdpbiBvZiB0aGUgcGxvdCBjYW4gYmUgZm91bmQgW2hlcmVdKGh0dHBzOi8vd3d3LmVjb25vbWlzdC5jb20vZ3JhcGhpYy1kZXRhaWwvMjAxNS8xMS8xOC90aGUtcGxhZ3VlLW9mLWdsb2JhbC10ZXJyb3Jpc20pLiBUaGlzIHBsb3QgY2FuIGJlIHJlcGxpY2F0ZWQgYnkgdXNpbmcgUiBhcyBmb2xsb3dzOiAKCiFbXSgvaG9tZS9raGFuaGFuL3RlcnJvci5wbmcpCgoKIyBSIENvZGVzIGZvciBEYXRhIENsZWFuaW5nIGFuZCBWaXN1YWxpemF0aW9uCgpEYXRhIGNhbiBiZSBkb3dubG9hZGVkIFtoZXJlXShodHRwczovL2dpdGh1Yi5jb20vZXZzdi9OTkV2YWx1YXRvci9ibG9iL21hc3Rlci9nbG9iYWx0ZXJyb3Jpc21kYl8wNzE4ZGlzdC5jc3YuemlwKS4gCgpgYGB7ciwgZXZhbD1GQUxTRX0KCiMgTG9hZCBkYXRhOiAKbGlicmFyeSh0aWR5dmVyc2UpCmRmUmF3IDwtIHJlYWRfY3N2KCIvaG9tZS9raGFuaGFuL0Rvd25sb2Fkcy9nbG9iYWx0ZXJyb3Jpc21kYl8wNzE4ZGlzdC5jc3YiKQoKIyBXZXN0ZXJuIENvdW50cmllczogCgpsaWJyYXJ5KHJ2ZXN0KQoKcmVhZF9odG1sKCJodHRwOi8vd29ybGRwb3B1bGF0aW9ucmV2aWV3LmNvbS9jb3VudHJpZXMvd2VzdGVybi1jb3VudHJpZXMvIikgJT4lIAogIGh0bWxfbm9kZXMoeHBhdGggPSAnLy8qW0BpZD0iZGF0YVRhYmxlIl0vZGl2WzFdL2Rpdi9kaXYvZGl2L2Rpdi9kaXZbMl0vdGFibGUnKSAlPiUgCiAgaHRtbF90YWJsZShmaWxsID0gVFJVRSkgJT4lIAogIC5bWzFdXSAlPiUgCiAgc2xpY2UoLTEpICU+JSAKICByZW5hbWUoQ291bnRyeSA9IFgxLCBQb3AgPSBYMikgLT4gd2VzdGVybl9kZgoKCiMgQWRkIEdyZWVjZSBhbmQgSXNyYWVsOiAKCndlc3RDb3VudHJpZXMgPC0gYyh3ZXN0ZXJuX2RmJENvdW50cnksICJHcmVlY2UiLCAiSXNyYWVsIikKCiMgU2VsZWN0IHNvbWUgY29sdW1ucyBhbmQgY3JlYXRlIGEgbmV3IGNvbHVtbjogCgpkZlJhdyAlPiUgIAogIHNlbGVjdChpeWVhciwgY291bnRyeV90eHQsIG5raWxsLCBua2lsbHRlcikgJT4lIAogIGZpbHRlcihpeWVhciAlaW4lIGMoMjAwMDoyMDE0KSkgJT4lIAogIG11dGF0ZShua2lsbCA9IHJlcGxhY2VfbmEobmtpbGwsIDApKSAlPiUgCiAgbXV0YXRlKG5raWxsdGVyID0gcmVwbGFjZV9uYShua2lsbHRlciwgMCkpICU+JSAKICBtdXRhdGUodG90YWxEZWF0aCA9IG5raWxsICsgbmtpbGx0ZXIpICU+JSAKICBtdXRhdGUocmVnaW9uID0gY2FzZV93aGVuKGNvdW50cnlfdHh0ICVpbiUgYygiU3lyaWEiLCJBZmdoYW5pc3RhbiIsIlBha2lzdGFuIikgfiAiU3lyaWEsIEFmZ2hhbmlzdGFuICYgUGFraXN0YW4iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50cnlfdHh0ICVpbiUgd2VzdENvdW50cmllcyB+ICJXZXN0ZXJuIENvdW50cmllcyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRyeV90eHQgPT0gIklyYXEiIH4gIklyYXEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRyeV90eHQgPT0gIk5pZ2VyaWEiIH4gIk5pZ2VyaWEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+ICJPdGhlcnMiKSkgJT4lIAogIGdyb3VwX2J5KGl5ZWFyLCByZWdpb24pICU+JSAKICBzdW1tYXJpc2UoZGVhdGhzID0gc3VtKHRvdGFsRGVhdGgpIC8gMTAwMCkgJT4lICAKICB1bmdyb3VwKCkgLT4gZGZQbG90CgojIFRvdGFsIERlYXRoczogCgpkZlBsb3QgJT4lIAogIG11dGF0ZShyZWdpb24gPSAiUmVzdCBvZiB0aGUgV29ybGQiKSAlPiUgCiAgZ3JvdXBfYnkoaXllYXIsIHJlZ2lvbikgJT4lIAogIHN1bW1hcmlzZShkZWF0aHMgPSBzdW0oZGVhdGhzKSkgJT4lIAogIHVuZ3JvdXAoKSAtPiB0b3RhbERlYXRocyAKCiMgUmVtb3ZlIE90aGVyczogCmRmUGxvdCAlPiUgZmlsdGVyKHJlZ2lvbiAhPSAiT3RoZXJzIikgLT4gZGZfcmVtYWluaW5nCgojIEpvaW50IHRoZSB0d28gZGF0YSBzZXRzOiAKZGZfZm9yX3Bsb3RpbmcgPC0gYmluZF9yb3dzKGRmX3JlbWFpbmluZywgdG90YWxEZWF0aHMpCgoKIyBNYWtlIGEgZHJhZnQgdmVyc2lvbjogCgpnZ3Bsb3QoKSArIAogIGdlb21fbGluZShkYXRhID0gdG90YWxEZWF0aHMsIGFlcyh4ID0gaXllYXIsIHkgPSBkZWF0aHMpLCBzaXplID0gMS4yKSArCiAgZ2VvbV9hcmVhKGRhdGEgPSB0b3RhbERlYXRocywgYWVzKHggPSBpeWVhciwgeSA9IGRlYXRocywgZmlsbCA9IHJlZ2lvbikpICsKICBnZW9tX2FyZWEoZGF0YSA9IGRmX3JlbWFpbmluZywgYWVzKHggPSBpeWVhciwgeSA9IGRlYXRocywgZmlsbCA9IHJlZ2lvbiksIGNvbG9yID0gIndoaXRlIikgKyAKICBsYWJzKHRpdGxlID0gIlRoZSBudW1iZXIgb2YgZGVhdGhzIGZyb20gZ2xvYmFsIHRlcnJvcmlzbSwgMjAwMC0yMDE0IiwgCiAgICAgICBzdWJ0aXRsZSA9ICJEZWF0aHMgZnJvbSBnbG9iYWwgdGVycm9yaXNtIGhhdmUgaW5jcmVhc2VkIGRyYW1hdGljYWxseSBvdmVyIHRoZSBsYXN0IDE1IHllYXJzLlxuVGhlIG51bWJlciBvZiBkZWF0aHMgaGFzIGluY3JlYXNlZCBlbGV2ZW5mb2xkIHNpbmUgdGhlIHllYXIgMjAwMCIsIAogICAgICAgY2FwdGlvbiA9ICJTb3VyY2U6IFNUQVJULCBJRVAiKSAtPiBwCgoKIyBGaW5hbGl6ZSBvdXIgcGxvdDogCgplY29ub21pc3RDb2xvcnMgPC0gYygiIzdiMjcxMyIsICIjZWI5ZTg0IiwgIiMwMGE0ZGMiLCAiI2YxNWE0MCIsICIjMDA1MjZkIikKbXlfZm9udCA8LSAiVWJ1bnR1IENvbmRlbnNlZCIKbGFiZWxfeCA8LSBjKCIyMDAwIiwgcGFzdGUwKCIwIiwgMTo5KSwgMTA6MTMsICIyMDE0IikKbGFiZWxfeSA8LSBjKHNlcSgwLCA1MCwgMTApLCAiNjBLIikKCnAgKyAKICB0aGVtZV9taW5pbWFsKGJhc2VfZmFtaWx5ID0gbXlfZm9udCkgKyAKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBlY29ub21pc3RDb2xvcnMpICsgCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA2MCwgMTApLCBsaW1pdHMgPSBjKDAsIDYwKSwgbGFiZWxzID0gbGFiZWxfeSwgZXhwYW5kID0gYygwLCAwKSwgcG9zaXRpb24gPSAicmlnaHQiKSArIAogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwMCwgMjAxNCwgMSksIGxhYmVscyA9IGxhYmVsX3gsIGV4cGFuZCA9IGMoMCwgMC4zKSkgKyAKICB0aGVtZShwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCkpICsgCiAgdGhlbWUocGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpKSArIAogIHRoZW1lKHBhbmVsLmdyaWQubWlub3IueSA9IGVsZW1lbnRfYmxhbmsoKSkgKyAKICB0aGVtZShwYW5lbC5ncmlkLm1ham9yLnkgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAiZGFya2dyZXkiKSkgKyAKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSBjKDAuMTMsIDAuNzEpLCBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCkpICsgCiAgdGhlbWUobGVnZW5kLmtleS53aWR0aCA9IHVuaXQoMjUsICJwdCIpLCBsZWdlbmQua2V5LmhlaWdodCA9IHVuaXQoMTUsICJwdCIpKSArIAogIHRoZW1lKGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KG1hcmdpbiA9IG1hcmdpbihsID0gMSksIHNpemUgPSAxMywgY29sb3IgPSAiZ3JleTIwIikpICsgCiAgdGhlbWUocGxvdC5tYXJnaW4gPSB1bml0KHJlcCgxLCA0KSwgImNtIikpICsgCiAgdGhlbWUoYXhpcy50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSkgKyAKICB0aGVtZShheGlzLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEzKSkgKyAKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAyNiwgY29sb3IgPSAiZ3JleTIwIikpICsgCiAgdGhlbWUocGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTUsIGNvbG9yID0gImdyZXkzMCIpKSArIAogIHRoZW1lKHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIGNvbG91ciA9ICJncmV5MzAiKSkgKyAKICB0aGVtZShsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgc2l6ZSA9IDApKQoKbGlicmFyeShncmlkKQpncmlkLnJlY3QoeCA9IDAuMDE1LCB5ID0gMC45MSwgaGp1c3QgPSAxLCB2anVzdCA9IDAsIGdwID0gZ3BhcihmaWxsID0gIiNlNTAwMWMiLCBsd2QgPSAwKSkgIApncmlkLnJlY3QoeCA9IDEsIHkgPSAxIC0gMC4wMDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAwLCAgZ3AgPSBncGFyKGZpbGwgPSAiI2U1MDAxYyIsIGx3ZCA9IDApKSAKICAKYGBgCgoK