Practice R

Practice 3: Choropleth Maps

Mapping of Viet Nam

# Clear workspace: 
rm(list = ls())

 # Load data:
library(tidyverse)
library(viridis)

link <- "https://data.opendevelopmentmekong.net/dataset/999c96d8-fae0-4b82-9a2b-e481f6f50e12/resource/2818c2c5-e9c3-440b-a9b8-3029d7298065/download/diaphantinhenglish.geojson?fbclid=IwAR1coUVLkuEoJRsgaH81q6ocz1nVeGBirqpKRBN8WWxXQIJREUL1buFi1eE"

mapvn <- sf::st_read(link)

vietnam_district_level <- raster::getData("GADM", country = "Vietnam", level = 1) %>%
fortify(region = "NAME_1")


ggplot() +
geom_polygon(data = vietnam_district_level, aes(long, lat, group = group, fill = id), color = "#404040", show.legend = FALSE) +
scale_fill_viridis(discrete = TRUE, name = "") +
geom_sf(data = mapvn %>% filter(Name == "Khanh Hoa" | Name == "Da Nang"), color = "#404040", fill = NA) +
theme(panel.background = element_rect(fill = "azure"), panel.border = element_rect(fill = NA)) +
theme(plot.title = element_text(color = "grey20", size = 18, face = "bold")) +
theme(plot.caption = element_text(size = 11, colour = "grey20", face = "italic")) +
labs(x = NULL, y = NULL,
  title = "Map of Vietnam",
  caption = "https://data.opendevelopmentmekong.net")

Mapping of Hà Nội

Trong hình tôi đánh dấu Gia Lâm vì đây là nơi tôi đang sinh sống ^^

rm(list = ls())
library(tidyverse)
library(raster)

# Lấy dữ liệu địa lí của VN đến cấp xã: 

df_vn <- getData("GADM", country = "Vietnam", level = 3)

hanoi <- df_vn[df_vn$NAME_1 == "Hà Nội",]
detach(package:raster)

hn <- hanoi %>% fortify(region = "NAME_3")

#plot cấp xã

hn %>% 
  ggplot(aes(x = long, y = lat, group = group)) +
  geom_polygon(aes(fill = id),
                   color = "grey40",
                   show.legend = FALSE,
                   size = 0.01) +
  labs(x = NULL, y = NULL,
       title = "Map of Ha Noi Province by Commune Level") +
    theme_dark()

#Cấp quận/huyện:

hn2 <- hanoi %>% fortify(region = "NAME_2")

hn2 %>% 
  ggplot(aes(x = long, y = lat, group = group)) +
  geom_polygon(aes(fill = id),
               color = "grey40",
               show.legend = FALSE,
               alpha = 0.7) +
  labs(x = NULL, y = NULL, 
       title = "Map of Ha Noi Province by District Level") +
  theme_minimal()


hn_long <- hn2 %>% 
  group_by(id) %>% 
  summarise_each(funs(mean), long)

hn_lat <- hn2 %>% 
  group_by(id) %>% 
  summarise_each(funs(mean), lat)

mix <- data.frame(long = hn_long$long,
                  lat = hn_lat$lat,
                  name = hanoi$NAME_2 %>% unique())

# lấy ra tên của quận/huyện
mix2 <- hanoi$NAME_2 %>% unique()  

#map of HN

ggplot() +
  geom_polygon(data = hn2, aes(x = long, y = lat, group = group, fill = id),
               color = "grey40", show.legend = FALSE, alpha = 0.7) +
  geom_text(data = mix, aes(long, lat, label = mix2), size = 2.5) +
  geom_point(data = mix %>% filter(name == mix2[10]), aes(long, lat), label = mix2[10], size = 2.5, color = "red") +
  theme(plot.title = element_text(color = "grey20", size = 24, face = "bold")) +
  labs(x = NULL, y = NULL,
       title = "Map of Ha Noi Province by District Level") +
  theme_minimal()

LS0tDQp0aXRsZTogJ1ByYWN0aWNlIDM6IENob3JvcGxldGggTWFwcycNCmF1dGhvcjogIk5ndXllbiBUaGkgTmdvYyBIdXllbiINCmRhdGU6ICIzLzUvMjAyMSINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBoaWdobGlnaHQ6IHplbmJ1cm4NCiAgICB0aGVtZTogZmxhdGx5DQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZmxvYXQ6IHllcw0KICAnJzogZGVmYXVsdA0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSkNCmBgYA0KDQpQcmFjdGljZSBSDQoNClByYWN0aWNlIDM6IENob3JvcGxldGggTWFwcw0KDQojIE1hcHBpbmcgb2YgVmlldCBOYW0NCg0KYGBge3IsIGV2YWw9RkFMU0V9DQojIENsZWFyIHdvcmtzcGFjZTogDQpybShsaXN0ID0gbHMoKSkNCg0KICMgTG9hZCBkYXRhOg0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KHZpcmlkaXMpDQoNCmxpbmsgPC0gImh0dHBzOi8vZGF0YS5vcGVuZGV2ZWxvcG1lbnRtZWtvbmcubmV0L2RhdGFzZXQvOTk5Yzk2ZDgtZmFlMC00YjgyLTlhMmItZTQ4MWY2ZjUwZTEyL3Jlc291cmNlLzI4MThjMmM1LWU5YzMtNDQwYi1hOWI4LTMwMjlkNzI5ODA2NS9kb3dubG9hZC9kaWFwaGFudGluaGVuZ2xpc2guZ2VvanNvbj9mYmNsaWQ9SXdBUjFjb1VWTGt1RW9KUnNnYUg4MXE2b2N6MW5WZUdCaXJxcEtSQk44V1d4WFFJSlJFVUwxYnVGaTFlRSINCg0KbWFwdm4gPC0gc2Y6OnN0X3JlYWQobGluaykNCg0KdmlldG5hbV9kaXN0cmljdF9sZXZlbCA8LSByYXN0ZXI6OmdldERhdGEoIkdBRE0iLCBjb3VudHJ5ID0gIlZpZXRuYW0iLCBsZXZlbCA9IDEpICU+JQ0KZm9ydGlmeShyZWdpb24gPSAiTkFNRV8xIikNCg0KDQpnZ3Bsb3QoKSArDQpnZW9tX3BvbHlnb24oZGF0YSA9IHZpZXRuYW1fZGlzdHJpY3RfbGV2ZWwsIGFlcyhsb25nLCBsYXQsIGdyb3VwID0gZ3JvdXAsIGZpbGwgPSBpZCksIGNvbG9yID0gIiM0MDQwNDAiLCBzaG93LmxlZ2VuZCA9IEZBTFNFKSArDQpzY2FsZV9maWxsX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBuYW1lID0gIiIpICsNCmdlb21fc2YoZGF0YSA9IG1hcHZuICU+JSBmaWx0ZXIoTmFtZSA9PSAiS2hhbmggSG9hIiB8IE5hbWUgPT0gIkRhIE5hbmciKSwgY29sb3IgPSAiIzQwNDA0MCIsIGZpbGwgPSBOQSkgKw0KdGhlbWUocGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gImF6dXJlIiksIHBhbmVsLmJvcmRlciA9IGVsZW1lbnRfcmVjdChmaWxsID0gTkEpKSArDQp0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImdyZXkyMCIsIHNpemUgPSAxOCwgZmFjZSA9ICJib2xkIikpICsNCnRoZW1lKHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChzaXplID0gMTEsIGNvbG91ciA9ICJncmV5MjAiLCBmYWNlID0gIml0YWxpYyIpKSArDQpsYWJzKHggPSBOVUxMLCB5ID0gTlVMTCwNCiAgdGl0bGUgPSAiTWFwIG9mIFZpZXRuYW0iLA0KICBjYXB0aW9uID0gImh0dHBzOi8vZGF0YS5vcGVuZGV2ZWxvcG1lbnRtZWtvbmcubmV0IikNCg0KDQpgYGANCiFbXShEOlxSXG1hcCBvZiB2aWV0bmFtLnBuZykNCg0KIyBNYXBwaW5nIG9mIEjDoCBO4buZaQ0KDQpUcm9uZyBow6xuaCB0w7RpIMSRw6FuaCBk4bqldSBHaWEgTMOibSB2w6wgxJHDonkgbMOgIG7GoWkgdMO0aSDEkWFuZyBzaW5oIHPhu5FuZyBeXg0KDQpgYGB7ciwgZXZhbD1GQUxTRX0NCg0Kcm0obGlzdCA9IGxzKCkpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkocmFzdGVyKQ0KDQojIEzhuqV5IGThu68gbGnhu4d1IMSR4buLYSBsw60gY+G7p2EgVk4gxJHhur9uIGPhuqVwIHjDozogDQoNCmRmX3ZuIDwtIGdldERhdGEoIkdBRE0iLCBjb3VudHJ5ID0gIlZpZXRuYW0iLCBsZXZlbCA9IDMpDQoNCmhhbm9pIDwtIGRmX3ZuW2RmX3ZuJE5BTUVfMSA9PSAiSMOgIE7hu5lpIixdDQpkZXRhY2gocGFja2FnZTpyYXN0ZXIpDQoNCmhuIDwtIGhhbm9pICU+JSBmb3J0aWZ5KHJlZ2lvbiA9ICJOQU1FXzMiKQ0KDQojcGxvdCBj4bqlcCB4w6MNCg0KaG4gJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBsb25nLCB5ID0gbGF0LCBncm91cCA9IGdyb3VwKSkgKw0KICBnZW9tX3BvbHlnb24oYWVzKGZpbGwgPSBpZCksDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAiZ3JleTQwIiwNCiAgICAgICAgICAgICAgICAgICBzaG93LmxlZ2VuZCA9IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgIHNpemUgPSAwLjAxKSArDQogIGxhYnMoeCA9IE5VTEwsIHkgPSBOVUxMLA0KICAgICAgIHRpdGxlID0gIk1hcCBvZiBIYSBOb2kgUHJvdmluY2UgYnkgQ29tbXVuZSBMZXZlbCIpICsNCiAgICB0aGVtZV9kYXJrKCkNCg0KI0PhuqVwIHF14bqtbi9odXnhu4duOg0KDQpobjIgPC0gaGFub2kgJT4lIGZvcnRpZnkocmVnaW9uID0gIk5BTUVfMiIpDQoNCmhuMiAlPiUgDQogIGdncGxvdChhZXMoeCA9IGxvbmcsIHkgPSBsYXQsIGdyb3VwID0gZ3JvdXApKSArDQogIGdlb21fcG9seWdvbihhZXMoZmlsbCA9IGlkKSwNCiAgICAgICAgICAgICAgIGNvbG9yID0gImdyZXk0MCIsDQogICAgICAgICAgICAgICBzaG93LmxlZ2VuZCA9IEZBTFNFLA0KICAgICAgICAgICAgICAgYWxwaGEgPSAwLjcpICsNCiAgbGFicyh4ID0gTlVMTCwgeSA9IE5VTEwsIA0KICAgICAgIHRpdGxlID0gIk1hcCBvZiBIYSBOb2kgUHJvdmluY2UgYnkgRGlzdHJpY3QgTGV2ZWwiKSArDQogIHRoZW1lX21pbmltYWwoKQ0KDQoNCmhuX2xvbmcgPC0gaG4yICU+JSANCiAgZ3JvdXBfYnkoaWQpICU+JSANCiAgc3VtbWFyaXNlX2VhY2goZnVucyhtZWFuKSwgbG9uZykNCg0KaG5fbGF0IDwtIGhuMiAlPiUgDQogIGdyb3VwX2J5KGlkKSAlPiUgDQogIHN1bW1hcmlzZV9lYWNoKGZ1bnMobWVhbiksIGxhdCkNCg0KbWl4IDwtIGRhdGEuZnJhbWUobG9uZyA9IGhuX2xvbmckbG9uZywNCiAgICAgICAgICAgICAgICAgIGxhdCA9IGhuX2xhdCRsYXQsDQogICAgICAgICAgICAgICAgICBuYW1lID0gaGFub2kkTkFNRV8yICU+JSB1bmlxdWUoKSkNCg0KIyBs4bqleSByYSB0w6puIGPhu6dhIHF14bqtbi9odXnhu4duDQptaXgyIDwtIGhhbm9pJE5BTUVfMiAlPiUgdW5pcXVlKCkgIA0KDQojbWFwIG9mIEhODQoNCmdncGxvdCgpICsNCiAgZ2VvbV9wb2x5Z29uKGRhdGEgPSBobjIsIGFlcyh4ID0gbG9uZywgeSA9IGxhdCwgZ3JvdXAgPSBncm91cCwgZmlsbCA9IGlkKSwNCiAgICAgICAgICAgICAgIGNvbG9yID0gImdyZXk0MCIsIHNob3cubGVnZW5kID0gRkFMU0UsIGFscGhhID0gMC43KSArDQogIGdlb21fdGV4dChkYXRhID0gbWl4LCBhZXMobG9uZywgbGF0LCBsYWJlbCA9IG1peDIpLCBzaXplID0gMi41KSArDQogIGdlb21fcG9pbnQoZGF0YSA9IG1peCAlPiUgZmlsdGVyKG5hbWUgPT0gbWl4MlsxMF0pLCBhZXMobG9uZywgbGF0KSwgbGFiZWwgPSBtaXgyWzEwXSwgc2l6ZSA9IDIuNSwgY29sb3IgPSAicmVkIikgKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImdyZXkyMCIsIHNpemUgPSAyNCwgZmFjZSA9ICJib2xkIikpICsNCiAgbGFicyh4ID0gTlVMTCwgeSA9IE5VTEwsDQogICAgICAgdGl0bGUgPSAiTWFwIG9mIEhhIE5vaSBQcm92aW5jZSBieSBEaXN0cmljdCBMZXZlbCIpICsNCiAgdGhlbWVfbWluaW1hbCgpDQoNCmBgYA0KIVtdKEQ6XFJcbWFwIG9mIGhuLnBuZykNCg==