30 Shortest Countries

R Code for Plot
# Load some R packages:
library(rvest)
library(tidyverse)
library(hrbrthemes)
my_font <- "Roboto Condensed"
# Collect data:
"http://worldpopulationreview.com/countries/average-height-by-country/" %>%
read_html() %>%
html_table() %>%
.[[1]] %>%
select(X2:X7) %>%
slice(-1) -> heightData
# Rename for all columns:
names(heightData) <- c("country", "male_cm", "female_cm", "male_ft", "female_ft", "popuation")
# Prepare data:
heightData %>%
mutate_at(c("male_cm", "female_cm"), function(x) {x %>% as.numeric()}) -> heightData
only_male <- heightData %>%
select(country, male_cm) %>%
filter(!is.na(male_cm)) %>%
mutate(label_male = as.character(round(male_cm, 1))) %>%
mutate(label_male = case_when(str_count(label_male) != 5 ~ paste0(label_male, ".0"), TRUE ~ label_male))
only_female <- heightData %>%
select(country, female_cm) %>%
filter(!is.na(female_cm)) %>%
mutate(label_female = as.character(round(female_cm, 1))) %>%
mutate(label_female = case_when(str_count(label_female) != 5 ~ paste0(label_female, ".0"), TRUE ~ label_female))
inner_join(only_female, only_male, by = "country") %>%
arrange(male_cm) %>%
mutate(country = factor(country, levels = country)) -> df_for_vis
df_for_vis %>%
mutate(end_point = female_cm - 3.3) %>%
mutate(country_color = case_when(country == "Vietnam" ~ "red", TRUE ~ "white")) -> df_for_vis
# Visualization:
df_for_vis %>%
top_n(-30, wt = male_cm) %>%
ggplot(aes(x = country)) +
geom_segment(aes(y = female_cm, yend = male_cm, x = country, xend = country), color = "white") +
geom_point(aes(x = country, y = male_cm, color = "Male"), size = 4) +
geom_point(aes(x = country, y = female_cm, color = "Female"), size = 4) +
coord_flip() +
theme_modern_rc() +
scale_color_manual(name = "", labels = c("Female", "Male"), values = c("yellow", "cyan")) +
theme(panel.grid = element_blank()) +
theme(axis.text.y = element_text(size = 11, color = "white")) +
theme(axis.text.x = element_blank()) +
theme(legend.position = c(0.93, 0.5)) +
theme(legend.position = "top") +
scale_y_continuous(limits = c(138, 180), expand = c(0, 0)) +
geom_text(aes(x = country, y = female_cm, label = label_female), hjust = 1.4, color = "white", size = 4, family = my_font) +
geom_text(aes(x = country, y = male_cm, label = label_male), hjust = -0.4, color = "white", size = 4, family = my_font) +
geom_segment(aes(y = 139, yend = end_point, x = country, xend = country), color = "gray80", linetype = 3) +
labs(x = NULL, y = NULL,
title = "Average Height By 30 Shortest Countries, 2019",
subtitle = "Unit of measurement: centimeters.",
caption = "Data Source: http://worldpopulationreview.com") +
theme(plot.margin = unit(c(1, 1.5, 1, 1), "cm")) +
theme(plot.title = element_text(size = 22)) +
theme(plot.subtitle = element_text(size = 12, color = "white")) +
theme(plot.caption = element_text(size = 10, face = "italic")) +
theme(legend.text = element_text(color = "white", size = 12, family = my_font, face = "bold"))
LS0tDQp0aXRsZTogIkF2ZXJhZ2UgSGVpZ2h0IEJ5IDMwIFNob3J0ZXN0IENvdW50cmllcywgMjAxOSINCnN1YnRpdGxlOiAiRGFpbHkgR3JhcGggU2VyaWVzIg0KYXV0aG9yOiAiTmd1eWVuIENoaSBEdW5nIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgICMgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgaGlnaGxpZ2h0OiB6ZW5idXJuDQogICAgdGhlbWU6IGZsYXRseQ0KICAgIHRvYzogeWVzDQogICAgdG9jX2Zsb2F0OiB5ZXMNCiAgd29yZF9kb2N1bWVudDoNCiAgICB0b2M6IHllcw0KLS0tDQoNCmBgYHtyIHNldHVwLGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFLCBmaWcucmV0aW5hPTIpDQpgYGANCg0KDQojIDMwIFNob3J0ZXN0IENvdW50cmllcw0KDQohW10oQzpcXFVzZXJzXFxaYm9va1xcRGVza3RvcFxccGljXFxoZWlnaHQuanBnKQ0KDQoNCiMgUiBDb2RlIGZvciBQbG90DQoNCmBgYHtyLCBldmFsPUZBTFNFfQ0KIyBMb2FkIHNvbWUgUiBwYWNrYWdlczogDQoNCmxpYnJhcnkocnZlc3QpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoaHJicnRoZW1lcykNCm15X2ZvbnQgPC0gIlJvYm90byBDb25kZW5zZWQiDQoNCiMgQ29sbGVjdCBkYXRhOiANCg0KImh0dHA6Ly93b3JsZHBvcHVsYXRpb25yZXZpZXcuY29tL2NvdW50cmllcy9hdmVyYWdlLWhlaWdodC1ieS1jb3VudHJ5LyIgJT4lIA0KICByZWFkX2h0bWwoKSAlPiUgDQogIGh0bWxfdGFibGUoKSAlPiUgDQogIC5bWzFdXSAlPiUgDQogIHNlbGVjdChYMjpYNykgJT4lIA0KICBzbGljZSgtMSkgLT4gaGVpZ2h0RGF0YQ0KDQojIFJlbmFtZSBmb3IgYWxsIGNvbHVtbnM6IA0KDQpuYW1lcyhoZWlnaHREYXRhKSA8LSBjKCJjb3VudHJ5IiwgIm1hbGVfY20iLCAiZmVtYWxlX2NtIiwgIm1hbGVfZnQiLCAiZmVtYWxlX2Z0IiwgInBvcHVhdGlvbiIpDQoNCiMgUHJlcGFyZSBkYXRhOiANCg0KaGVpZ2h0RGF0YSAlPiUgDQogIG11dGF0ZV9hdChjKCJtYWxlX2NtIiwgImZlbWFsZV9jbSIpLCBmdW5jdGlvbih4KSB7eCAlPiUgYXMubnVtZXJpYygpfSkgLT4gaGVpZ2h0RGF0YQ0KDQpvbmx5X21hbGUgPC0gaGVpZ2h0RGF0YSAlPiUgDQogIHNlbGVjdChjb3VudHJ5LCBtYWxlX2NtKSAlPiUgDQogIGZpbHRlcighaXMubmEobWFsZV9jbSkpICU+JSANCiAgbXV0YXRlKGxhYmVsX21hbGUgPSBhcy5jaGFyYWN0ZXIocm91bmQobWFsZV9jbSwgMSkpKSAlPiUgDQogIG11dGF0ZShsYWJlbF9tYWxlID0gY2FzZV93aGVuKHN0cl9jb3VudChsYWJlbF9tYWxlKSAhPSA1IH4gcGFzdGUwKGxhYmVsX21hbGUsICIuMCIpLCBUUlVFIH4gbGFiZWxfbWFsZSkpDQoNCm9ubHlfZmVtYWxlIDwtIGhlaWdodERhdGEgJT4lIA0KICBzZWxlY3QoY291bnRyeSwgZmVtYWxlX2NtKSAlPiUgDQogIGZpbHRlcighaXMubmEoZmVtYWxlX2NtKSkgJT4lIA0KICBtdXRhdGUobGFiZWxfZmVtYWxlID0gYXMuY2hhcmFjdGVyKHJvdW5kKGZlbWFsZV9jbSwgMSkpKSAlPiUgDQogIG11dGF0ZShsYWJlbF9mZW1hbGUgPSBjYXNlX3doZW4oc3RyX2NvdW50KGxhYmVsX2ZlbWFsZSkgIT0gNSB+IHBhc3RlMChsYWJlbF9mZW1hbGUsICIuMCIpLCBUUlVFIH4gbGFiZWxfZmVtYWxlKSkNCg0KaW5uZXJfam9pbihvbmx5X2ZlbWFsZSwgb25seV9tYWxlLCBieSA9ICJjb3VudHJ5IikgJT4lIA0KICBhcnJhbmdlKG1hbGVfY20pICU+JSANCiAgbXV0YXRlKGNvdW50cnkgPSBmYWN0b3IoY291bnRyeSwgbGV2ZWxzID0gY291bnRyeSkpIC0+IGRmX2Zvcl92aXMNCg0KZGZfZm9yX3ZpcyAlPiUgDQogIG11dGF0ZShlbmRfcG9pbnQgPSBmZW1hbGVfY20gLSAzLjMpICU+JSANCiAgbXV0YXRlKGNvdW50cnlfY29sb3IgPSBjYXNlX3doZW4oY291bnRyeSA9PSAiVmlldG5hbSIgfiAicmVkIiwgVFJVRSB+ICJ3aGl0ZSIpKSAtPiBkZl9mb3JfdmlzDQoNCiMgVmlzdWFsaXphdGlvbjogDQoNCmRmX2Zvcl92aXMgJT4lIA0KICB0b3BfbigtMzAsIHd0ID0gbWFsZV9jbSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBjb3VudHJ5KSkgKyANCiAgZ2VvbV9zZWdtZW50KGFlcyh5ID0gZmVtYWxlX2NtLCB5ZW5kID0gbWFsZV9jbSwgeCA9IGNvdW50cnksIHhlbmQgPSBjb3VudHJ5KSwgY29sb3IgPSAid2hpdGUiKSArIA0KICBnZW9tX3BvaW50KGFlcyh4ID0gY291bnRyeSwgeSA9IG1hbGVfY20sIGNvbG9yID0gIk1hbGUiKSwgc2l6ZSA9IDQpICsgDQogIGdlb21fcG9pbnQoYWVzKHggPSBjb3VudHJ5LCB5ID0gZmVtYWxlX2NtLCBjb2xvciA9ICJGZW1hbGUiKSwgc2l6ZSA9IDQpICsgDQogIGNvb3JkX2ZsaXAoKSArIA0KICB0aGVtZV9tb2Rlcm5fcmMoKSArIA0KICBzY2FsZV9jb2xvcl9tYW51YWwobmFtZSA9ICIiLCBsYWJlbHMgPSBjKCJGZW1hbGUiLCAiTWFsZSIpLCB2YWx1ZXMgPSBjKCJ5ZWxsb3ciLCAiY3lhbiIpKSArIA0KICB0aGVtZShwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpKSArIA0KICB0aGVtZShheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTEsIGNvbG9yID0gIndoaXRlIikpICsgDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF9ibGFuaygpKSArIA0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSBjKDAuOTMsIDAuNSkpICsgDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKSArIA0KICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygxMzgsIDE4MCksIGV4cGFuZCA9IGMoMCwgMCkpICsgDQogIGdlb21fdGV4dChhZXMoeCA9IGNvdW50cnksIHkgPSAgZmVtYWxlX2NtLCBsYWJlbCA9IGxhYmVsX2ZlbWFsZSksIGhqdXN0ID0gMS40LCBjb2xvciA9ICJ3aGl0ZSIsIHNpemUgPSA0LCBmYW1pbHkgPSBteV9mb250KSArIA0KICBnZW9tX3RleHQoYWVzKHggPSBjb3VudHJ5LCB5ID0gIG1hbGVfY20sIGxhYmVsID0gbGFiZWxfbWFsZSksIGhqdXN0ID0gLTAuNCwgY29sb3IgPSAid2hpdGUiLCBzaXplID0gNCwgZmFtaWx5ID0gbXlfZm9udCkgKyANCiAgZ2VvbV9zZWdtZW50KGFlcyh5ID0gMTM5LCB5ZW5kID0gZW5kX3BvaW50LCB4ID0gY291bnRyeSwgeGVuZCA9IGNvdW50cnkpLCBjb2xvciA9ICJncmF5ODAiLCBsaW5ldHlwZSA9IDMpICsgDQogIGxhYnMoeCA9IE5VTEwsIHkgPSBOVUxMLCANCiAgICAgICB0aXRsZSA9ICJBdmVyYWdlIEhlaWdodCBCeSAzMCBTaG9ydGVzdCBDb3VudHJpZXMsIDIwMTkiLCANCiAgICAgICBzdWJ0aXRsZSA9ICJVbml0IG9mIG1lYXN1cmVtZW50OiBjZW50aW1ldGVycy4iLCANCiAgICAgICBjYXB0aW9uID0gIkRhdGEgU291cmNlOiBodHRwOi8vd29ybGRwb3B1bGF0aW9ucmV2aWV3LmNvbSIpICsgDQogIHRoZW1lKHBsb3QubWFyZ2luID0gdW5pdChjKDEsIDEuNSwgMSwgMSksICJjbSIpKSArIA0KICB0aGVtZShwbG90LnRpdGxlICA9IGVsZW1lbnRfdGV4dChzaXplID0gMjIpKSArIA0KICB0aGVtZShwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiwgY29sb3IgPSAid2hpdGUiKSkgKyANCiAgdGhlbWUocGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCwgZmFjZSA9ICJpdGFsaWMiKSkgKyANCiAgdGhlbWUobGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoY29sb3IgPSAid2hpdGUiLCBzaXplID0gMTIsIGZhbWlseSA9IG15X2ZvbnQsIGZhY2UgPSAiYm9sZCIpKQ0KDQpgYGANCg0K