Introduction

Bài viết đưa ra kết quả về 30 quốc gia có chiều cao trung bình người thấp nhất, đứng cuối là Indonesia với trung bình chiều cao Nam và Nữ lần lượt là 1.58 và 1.47. Đáng quan tâm là Việt Nam là quốc gia thấp thứ 2 thế giới với các chỉ số lần lượt Nam và Nữ là 162.1 - 152.2. (theo World Population Review)

# Clear R environment: 
rm(list = ls())
# Load some R packages: 
library(tidyverse)
library(extrafont)
library(ggthemes)
library(grid)
library(rvest)

#Import data to link:
"http://worldpopulationreview.com/countries/average-height-by-country/" %>% 
  read_html() %>% 
  html_table() %>% 
  .[[1]] %>% 
  select(1:3) -> Dataheight

# Rename for all columns: 

names(Dataheight) <- c("country", "h_male", "h_female")

#----------------
# Prepare data: 
#----------------

Dataheight %>% 
  mutate_at(c("h_male", "h_female"), function(x) {x %>% as.numeric()}) -> Dataheight

#only male
o_male <- Dataheight %>% 
  select(country, h_male) %>% 
  filter(!is.na(h_male)) %>% 
  mutate(label_male = as.character(round(h_male, 1))) %>% 
  mutate(label_male = case_when(str_count(label_male) != 5 ~ paste0(label_male, ".0"), TRUE ~ label_male))

#only female
o_female <- Dataheight %>% 
  select(country, h_female) %>% 
  filter(!is.na(h_female)) %>% 
  mutate(label_female = as.character(round(h_female, 1))) %>% 
  mutate(label_female = case_when(str_count(label_female) != 5 ~ paste0(label_female, ".0"), TRUE ~ label_female))

#join data

inner_join(o_female, o_male, by = "country") %>% 
  arrange(h_male) %>% 
  mutate(country = factor(country, levels = country)) -> finaldata

finaldata %>% 
  mutate(end_point = h_male - 3.3) %>% 
  mutate(country_color = case_when(country == "Vietnam" ~ "red", TRUE ~ "white")) -> finaldata

#-----------------------
# Data Visualization
#-----------------------
library(hrbrthemes)
library(showtext)

# Select Ubuntu Condensed font: 
showtext_auto()
font_add_google(name = "Ubuntu Condensed", family = "ubu")
my_font <- "ubu"


finaldata %>% 
  top_n(-30, wt = h_male) %>% 
  ggplot(aes(x = country)) + 
  geom_segment(aes(y = h_female, yend = h_male, x = country, xend = country), color = "grey30") + 
  geom_point(aes(x = country, y = h_male, color = "Male"), size = 4) + 
  geom_point(aes(x = country, y = h_female, color = "Female"), size = 4) + 
  coord_flip() + 
  theme_econodist() +
  scale_color_manual(name = "", labels = c("Female", "Male"), values = c("#0693e3","#eb144c")) + 
  theme(axis.text.y = element_text(size = 9)) + #, color = "black"
  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 =  h_female, label = label_female), hjust = 1.4, color = "black", size = 4, family = my_font) + 
  geom_text(aes(x = country, y =  h_male, label = label_male), hjust = -0.4, color = "black", 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 2021", 
       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(family = my_font, size = 22))+
  theme(plot.subtitle = element_text(size = 12, color = "black", face = "italic")) + 
  theme(plot.caption = element_text(size = 10, face = "italic")) + 
  theme(panel.grid = element_blank())+
  theme(legend.text = element_text(color = "black", size = 12, face = "italic",family = my_font))

LS0tDQp0aXRsZTogIkF2ZXJhZ2UgSGVpZ2h0IEJ5IDMwIFNob3J0ZXN0IENvdW50cnkgMjAyMSINCmF1dGhvcjogIk5ndXllbiBUaGkgTmdvYyBIdXllbiINCmRhdGU6ICI3LzI1LzIwMjEiDQpvdXRwdXQ6IA0KICBodG1sX2RvY3VtZW50Og0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBoaWdobGlnaHQ6IHplbmJ1cm4NCiAgICAjIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgdGhlbWU6IGZsYXRseQ0KICAgIHRvYzogVFJVRQ0KICAgIHRvY19mbG9hdDogVFJVRQ0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KYGBgDQoNCiMgSW50cm9kdWN0aW9uDQoNCkLDoGkgdmnhur90IMSRxrBhIHJhIGvhur90IHF14bqjIHbhu4EgMzAgcXXhu5FjIGdpYSBjw7MgY2hp4buBdSBjYW8gdHJ1bmcgYsOsbmggbmfGsOG7nWkgdGjhuqVwIG5o4bqldCwgxJHhu6luZyBjdeG7kWkgbMOgIEluZG9uZXNpYSB24bubaSB0cnVuZyBiw6xuaCBjaGnhu4F1IGNhbyBOYW0gdsOgIE7hu68gbOG6p24gbMaw4bujdCBsw6AgMS41OCB2w6AgMS40Ny4gxJDDoW5nIHF1YW4gdMOibSBsw6AgVmnhu4d0IE5hbSBsw6AgcXXhu5FjIGdpYSB0aOG6pXAgdGjhu6kgMiB0aOG6vyBnaeG7m2kgduG7m2kgY8OhYyBjaOG7iSBz4buRIGzhuqduIGzGsOG7o3QgTmFtIHbDoCBO4buvIGzDoCAxNjIuMSAtIDE1Mi4yLiAodGhlbyBbV29ybGQgUG9wdWxhdGlvbiBSZXZpZXddKGh0dHA6Ly93b3JsZHBvcHVsYXRpb25yZXZpZXcuY29tL2NvdW50cmllcy9hdmVyYWdlLWhlaWdodC1ieS1jb3VudHJ5LykpDQoNCmBgYHtyLCBldmFsPUZBTFNFfQ0KIyBDbGVhciBSIGVudmlyb25tZW50OiANCnJtKGxpc3QgPSBscygpKQ0KIyBMb2FkIHNvbWUgUiBwYWNrYWdlczogDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoZXh0cmFmb250KQ0KbGlicmFyeShnZ3RoZW1lcykNCmxpYnJhcnkoZ3JpZCkNCmxpYnJhcnkocnZlc3QpDQoNCiNJbXBvcnQgZGF0YSB0byBsaW5rOg0KImh0dHA6Ly93b3JsZHBvcHVsYXRpb25yZXZpZXcuY29tL2NvdW50cmllcy9hdmVyYWdlLWhlaWdodC1ieS1jb3VudHJ5LyIgJT4lIA0KICByZWFkX2h0bWwoKSAlPiUgDQogIGh0bWxfdGFibGUoKSAlPiUgDQogIC5bWzFdXSAlPiUgDQogIHNlbGVjdCgxOjMpIC0+IERhdGFoZWlnaHQNCg0KIyBSZW5hbWUgZm9yIGFsbCBjb2x1bW5zOiANCg0KbmFtZXMoRGF0YWhlaWdodCkgPC0gYygiY291bnRyeSIsICJoX21hbGUiLCAiaF9mZW1hbGUiKQ0KDQojLS0tLS0tLS0tLS0tLS0tLQ0KIyBQcmVwYXJlIGRhdGE6IA0KIy0tLS0tLS0tLS0tLS0tLS0NCg0KRGF0YWhlaWdodCAlPiUgDQogIG11dGF0ZV9hdChjKCJoX21hbGUiLCAiaF9mZW1hbGUiKSwgZnVuY3Rpb24oeCkge3ggJT4lIGFzLm51bWVyaWMoKX0pIC0+IERhdGFoZWlnaHQNCg0KI29ubHkgbWFsZQ0Kb19tYWxlIDwtIERhdGFoZWlnaHQgJT4lIA0KICBzZWxlY3QoY291bnRyeSwgaF9tYWxlKSAlPiUgDQogIGZpbHRlcighaXMubmEoaF9tYWxlKSkgJT4lIA0KICBtdXRhdGUobGFiZWxfbWFsZSA9IGFzLmNoYXJhY3Rlcihyb3VuZChoX21hbGUsIDEpKSkgJT4lIA0KICBtdXRhdGUobGFiZWxfbWFsZSA9IGNhc2Vfd2hlbihzdHJfY291bnQobGFiZWxfbWFsZSkgIT0gNSB+IHBhc3RlMChsYWJlbF9tYWxlLCAiLjAiKSwgVFJVRSB+IGxhYmVsX21hbGUpKQ0KDQojb25seSBmZW1hbGUNCm9fZmVtYWxlIDwtIERhdGFoZWlnaHQgJT4lIA0KICBzZWxlY3QoY291bnRyeSwgaF9mZW1hbGUpICU+JSANCiAgZmlsdGVyKCFpcy5uYShoX2ZlbWFsZSkpICU+JSANCiAgbXV0YXRlKGxhYmVsX2ZlbWFsZSA9IGFzLmNoYXJhY3Rlcihyb3VuZChoX2ZlbWFsZSwgMSkpKSAlPiUgDQogIG11dGF0ZShsYWJlbF9mZW1hbGUgPSBjYXNlX3doZW4oc3RyX2NvdW50KGxhYmVsX2ZlbWFsZSkgIT0gNSB+IHBhc3RlMChsYWJlbF9mZW1hbGUsICIuMCIpLCBUUlVFIH4gbGFiZWxfZmVtYWxlKSkNCg0KI2pvaW4gZGF0YQ0KDQppbm5lcl9qb2luKG9fZmVtYWxlLCBvX21hbGUsIGJ5ID0gImNvdW50cnkiKSAlPiUgDQogIGFycmFuZ2UoaF9tYWxlKSAlPiUgDQogIG11dGF0ZShjb3VudHJ5ID0gZmFjdG9yKGNvdW50cnksIGxldmVscyA9IGNvdW50cnkpKSAtPiBmaW5hbGRhdGENCg0KZmluYWxkYXRhICU+JSANCiAgbXV0YXRlKGVuZF9wb2ludCA9IGhfbWFsZSAtIDMuMykgJT4lIA0KICBtdXRhdGUoY291bnRyeV9jb2xvciA9IGNhc2Vfd2hlbihjb3VudHJ5ID09ICJWaWV0bmFtIiB+ICJyZWQiLCBUUlVFIH4gIndoaXRlIikpIC0+IGZpbmFsZGF0YQ0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgRGF0YSBWaXN1YWxpemF0aW9uDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmxpYnJhcnkoaHJicnRoZW1lcykNCmxpYnJhcnkoc2hvd3RleHQpDQoNCiMgU2VsZWN0IFVidW50dSBDb25kZW5zZWQgZm9udDogDQpzaG93dGV4dF9hdXRvKCkNCmZvbnRfYWRkX2dvb2dsZShuYW1lID0gIlVidW50dSBDb25kZW5zZWQiLCBmYW1pbHkgPSAidWJ1IikNCm15X2ZvbnQgPC0gInVidSINCg0KDQpmaW5hbGRhdGEgJT4lIA0KICB0b3BfbigtMzAsIHd0ID0gaF9tYWxlKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IGNvdW50cnkpKSArIA0KICBnZW9tX3NlZ21lbnQoYWVzKHkgPSBoX2ZlbWFsZSwgeWVuZCA9IGhfbWFsZSwgeCA9IGNvdW50cnksIHhlbmQgPSBjb3VudHJ5KSwgY29sb3IgPSAiZ3JleTMwIikgKyANCiAgZ2VvbV9wb2ludChhZXMoeCA9IGNvdW50cnksIHkgPSBoX21hbGUsIGNvbG9yID0gIk1hbGUiKSwgc2l6ZSA9IDQpICsgDQogIGdlb21fcG9pbnQoYWVzKHggPSBjb3VudHJ5LCB5ID0gaF9mZW1hbGUsIGNvbG9yID0gIkZlbWFsZSIpLCBzaXplID0gNCkgKyANCiAgY29vcmRfZmxpcCgpICsgDQogIHRoZW1lX2Vjb25vZGlzdCgpICsNCiAgc2NhbGVfY29sb3JfbWFudWFsKG5hbWUgPSAiIiwgbGFiZWxzID0gYygiRmVtYWxlIiwgIk1hbGUiKSwgdmFsdWVzID0gYygiIzA2OTNlMyIsIiNlYjE0NGMiKSkgKyANCiAgdGhlbWUoYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDkpKSArICMsIGNvbG9yID0gImJsYWNrIg0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfYmxhbmsoKSkgKyANCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gYygwLjkzLCAwLjUpKSArIA0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAidG9wIikgKyANCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMTM4LCAxODApLCBleHBhbmQgPSBjKDAsIDApKSArIA0KICBnZW9tX3RleHQoYWVzKHggPSBjb3VudHJ5LCB5ID0gIGhfZmVtYWxlLCBsYWJlbCA9IGxhYmVsX2ZlbWFsZSksIGhqdXN0ID0gMS40LCBjb2xvciA9ICJibGFjayIsIHNpemUgPSA0LCBmYW1pbHkgPSBteV9mb250KSArIA0KICBnZW9tX3RleHQoYWVzKHggPSBjb3VudHJ5LCB5ID0gIGhfbWFsZSwgbGFiZWwgPSBsYWJlbF9tYWxlKSwgaGp1c3QgPSAtMC40LCBjb2xvciA9ICJibGFjayIsIHNpemUgPSA0LCBmYW1pbHkgPSBteV9mb250KSArDQogIGdlb21fc2VnbWVudChhZXMoeSA9IDEzOSwgeWVuZCA9IGVuZF9wb2ludCwgeCA9IGNvdW50cnksIHhlbmQgPSBjb3VudHJ5KSwgY29sb3IgPSAiZ3JheTgwIiwgbGluZXR5cGUgPSAzKSArIA0KICBsYWJzKHggPSBOVUxMLCB5ID0gTlVMTCwgDQogICAgICAgdGl0bGUgPSAiQXZlcmFnZSBIZWlnaHQgQnkgMzAgU2hvcnRlc3QgQ291bnRyaWVzIDIwMjEiLCANCiAgICAgICBzdWJ0aXRsZSA9ICJVbml0IG9mIG1lYXN1cmVtZW50OiBjZW50aW1ldGVycyIsIA0KICAgICAgIGNhcHRpb24gPSAiRGF0YSBTb3VyY2U6IGh0dHA6Ly93b3JsZHBvcHVsYXRpb25yZXZpZXcuY29tIikgKyANCiAgdGhlbWUocGxvdC5tYXJnaW4gPSB1bml0KGMoMSwgMS41LCAxLCAxKSwgImNtIikpICsgDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gbXlfZm9udCwgc2l6ZSA9IDIyKSkrDQogIHRoZW1lKHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyLCBjb2xvciA9ICJibGFjayIsIGZhY2UgPSAiaXRhbGljIikpICsgDQogIHRoZW1lKHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChzaXplID0gMTAsIGZhY2UgPSAiaXRhbGljIikpICsgDQogIHRoZW1lKHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCkpKw0KICB0aGVtZShsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJibGFjayIsIHNpemUgPSAxMiwgZmFjZSA9ICJpdGFsaWMiLGZhbWlseSA9IG15X2ZvbnQpKQ0KDQpgYGANCg0KIVtdKEQ6XFJccHJhY3RpY2VccGljdHVyZVxhdmVyYWdlIGhlaWdodCAyMDIxLnBuZykNCg==