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
mChoropleth 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)
# 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")