Membuat Pop-up pada Leaflet

Pop-up pada leaflet membutuhkan data longitude dan latitude. Bila data longitude dan latitude belum ada pada data, kita bisa gabungkan antara dua tabel data.

# data informasi yang ingin ditampilkan
leaflet <- read.csv("leaflet_data.csv")
head(leaflet)
# data berisi longitude dan latitude (dalam bentuk file csv)
shape <- read.csv("shape_data.csv")
head(shape)

Contoh penggabungan data longitude dan latitude dari data shape ke dalam data leaflet

library(dplyr)
shape_tojoin <- shape %>% 
  select(NAME, LON, LAT) # pilih kolom yang ingin digabungkan

data_leaflet <- leaflet %>% 
  left_join(shape_tojoin, # gabung data `shape_tojoin` ke `leaflet`
            by = "NAME") # berdasarkan kolom `NAME` (nama kolom harus sama di kedua data)

# siapkan kolom untuk popup
data_leaflet_fin <- data_leaflet %>% 
  mutate(popup = paste0(data_leaflet$NAME,"<br>",
                        "HDI: ", data_leaflet$HDI, "<br>",
                        "GDP per Capita: ", data_leaflet$GDP.per.Capita, "<br>",
                        "Status: ", data_leaflet$Status))

glimpse(data_leaflet_fin)
## Rows: 162
## Columns: 10
## $ NAME                       <chr> "Afghanistan", "Albania", "Algeria", "Angol~
## $ HDI                        <dbl> 0.46, 0.73, 0.73, 0.52, 0.83, 0.73, 0.93, 0~
## $ GDP.per.Capita             <dbl> 614.66, 4534.37, 5430.57, 4665.91, 13540.00~
## $ Total.Ecological.Footprint <dbl> 0.79, 2.21, 2.12, 0.93, 3.14, 2.23, 9.31, 6~
## $ Total.Biocapacity          <dbl> 0.50, 1.18, 0.59, 2.55, 6.92, 0.89, 16.57, ~
## $ Status                     <chr> "Deficit", "Deficit", "Deficit", "Reserve",~
## $ diff                       <dbl> -0.29, -1.03, -1.53, 1.62, 3.78, -1.34, 7.2~
## $ LON                        <dbl> 65.216, 20.068, 2.632, 17.544, -65.167, 44.~
## $ LAT                        <dbl> 33.677, 41.143, 28.163, -12.296, -35.377, 4~
## $ popup                      <chr> "Afghanistan<br>HDI: 0.46<br>GDP per Capita~

Cara membuat popup pada leaflet untuk tiap koordinat Negara:

library(leaflet)

m <- leaflet(data_leaflet_fin) %>% 
        addTiles() %>%
        setView(lat=10, lng=0 , zoom=2) %>% # default view pertama
    addCircleMarkers(lng = ~LON, lat = ~LAT, # `~` utk mencocokan kolom yg ingin dipakai
                     radius = 10, # radius titik
                     stroke = F, # ada outline titik/tidak
                     color = "red", # warna titik
                     popup = ~popup) # ada popup/tidak, isi popup

m

Choropleth Map Indonesia

Choropleth adalah plot peta dengan pewarnaan area tertentu berdasarkan nilainya. Choropleth membutuhkan shapefile (.shp) yang menyimpan batasan-batasan wilayah.

Sumber data: https://gadm.org/download_country_v3.html (R (sp): level1)

  • Situs data: https://gadm.org
  • Note: Level dari shapefile umumnya berdasarkan batas administratif negara diantaranya level 0 (negara) level 1 (provinsi), level 2 (kota), dst.
# read data
map_ina <- readRDS("gadm36_IDN_1_sp.rds")

data shape berbentuk layaknya list yang menyimpan beberapa komponen diantaranya data yang dapat kita isi nilai, dan polygons informasi terkait batasan wilayah. Kita dapat mengisi/mengatur nilai pada data untuk ditampilkan pada choropleth.

# data yang ingin ditampilkan dalam gradasi warna, bisa dijoin ke map_ina@data, misal:
# map_ina@data %>% left_join(data, by="NAME_1")

# untuk contoh ini, kita gunakan nilai dari kolom CC_1 saja
map_ina@data$CC_1 <- as.integer(map_ina@data$CC_1) # ubah ke angka u/ gradasi warna
## Loading required package: sp
# bisa pakai summary untuk menentukan batas gradasi warna
summary(map_ina@data$CC_1)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   11.00   19.00   51.00   47.03   72.00   94.00
# menyiapkan kostum warna untuk gradasi
library(RColorBrewer)
mybins <- c(-Inf,19,47,72,Inf) # batas-batas untuk gradasi
mypalette <- colorBin(palette="RdYlGn", # palette bisa dipilih dari cheatsheet warna 
                      domain=map_ina@data$CC_1, # gradasi mengikuti data yang mana
                      na.color="transparent", # kalau datanya NA
                      bins=mybins) # batasan warna mengikuti `mybins` yang sudah dibuat
# make a choropleth with leaflet
leaflet(map_ina) %>% 
        addTiles() %>%
        # setView(lat=10, lng=0 , zoom=2) %>% # set view pertama kali map terbentuk
    
  # for choropleth
        addPolygons( 
            fillColor = ~mypalette(CC_1), # mypalette yang menyesuaikan kolom CC_1
            color = "green",
            dashArray = "3", 
            fillOpacity = 0.6,
            weight=1,
            label = ~NAME_1, # label menyesuaikan kolom NAME_1
            labelOptions = labelOptions( 
                style = list("font-weight" = "normal", padding = "3px 8px"), 
                textsize = "13px", 
                direction = "auto"),
            # popup = popup # kolom baru di map_ina@data bernama `popup` berisi tulisan popup, juga bisa dibuat terlebih dahulu
        ) %>%
        # menambah legend untuk gradasi warna
        addLegend(pal=mypalette, 
                  values=~CC_1, opacity=0.9, 
                  title = paste("Gradasi","<br>","Warna"), 
                  position = "bottomleft")