4 Работа с картами пакет leaflet
4.1 Визуализация с leaflet
Для начала включим библиотеку:
library("tidyverse")
library("leaflet")и скачаем датасет:
df <- read_csv("https://tinyurl.com/yzfgony9")Мы можем нарисовать точки, полученные из кладбища
- в Стародубе:
df %>%
filter(place == "Стародуб") %>%
leaflet() %>%
addTiles() %>%
addCircles(lng = ~longitude,
lat = ~latitude,
stroke = NA,
radius = 1,
fillOpacity = 1,
label = ~tombstone_code)- в Бешенковичах:
df %>%
filter(place == "Бешенковичи") %>%
leaflet() %>%
addTiles() %>%
addCircles(lng = ~longitude,
lat = ~latitude,
stroke = NA,
radius = 1,
fillOpacity = 1,
label = ~tombstone_code)Используя предыдущий код постройте карту кладбища в Рашкове.
4.2 Раскраска на основании переменной
Мы можем раскрасить наши точки на основании гендерной пренадлежности усопшего:
pal_gender <- colorFactor("Set1", domain = df$gender)
df %>%
filter(place == "Стародуб") %>%
leaflet() %>%
addTiles() %>%
addCircles(lng = ~longitude,
lat = ~latitude,
stroke = NA,
radius = 1,
fillOpacity = 1,
label = ~tombstone_code,
color = ~pal_gender(gender)) %>%
addLegend(pal = pal_gender,
values = ~gender,
title = "")Зеленых точек n достаточно много, можно попробовать их убрать:
df %>%
filter(place == "Стародуб",
gender != "n") %>%
leaflet() %>%
addTiles() %>%
addCircles(lng = ~longitude,
lat = ~latitude,
stroke = NA,
radius = 1,
fillOpacity = 1,
label = ~tombstone_code,
color = ~pal_gender(gender)) %>%
addLegend(pal = pal_gender,
values = ~gender,
title = "")Попробуем нарисовать кладбище в Бешенковичах и посмотрим, где расположены надгробия с тегами роженица:
df %>%
mutate(labour = str_detect(tags, "роды"),
labour = ifelse(is.na(labour), FALSE, labour)) ->
df
pal_labour <- colorFactor("Set1", domain = c(TRUE, FALSE), ordered = TRUE)
df %>%
filter(place == "Бешенковичи") %>%
leaflet() %>%
addTiles() %>%
addCircles(lng = ~longitude,
lat = ~latitude,
stroke = NA,
radius = 1,
fillOpacity = 1,
label = ~tombstone_code,
color = ~pal_labour(labour)) %>%
addLegend(pal = pal_labour,
values = ~labour,
title = "Распределение рожениц")Убитые, оставляем?
df %>%
mutate(kadosh = str_detect(tags, "(кадош)|(погром)|(убит)"),
kadosh = ifelse(is.na(kadosh), FALSE, kadosh)) ->
df
pal_kadosh <- colorFactor("Set1", domain = c(TRUE, FALSE), ordered = TRUE)
df %>%
filter(place == "Рашков") %>%
leaflet() %>%
addTiles() %>%
addCircles(lng = ~longitude,
lat = ~latitude,
stroke = NA,
radius = 1,
fillOpacity = 1,
label = ~tombstone_code,
color = ~pal_kadosh(kadosh)) %>%
addLegend(pal = pal_kadosh,
values = ~kadosh,
title = "Распределение убитых")Цветом можно задавать не только категориальны данные, но и числовые:
pal_year <- colorNumeric("BrBG", domain = df$year)
df %>%
filter(place == "Стародуб",
!is.na(year),
!is.na(latitude)) %>%
leaflet() %>%
addTiles() %>%
addCircles(lng = ~longitude,
lat = ~latitude,
stroke = NA,
radius = 1,
fillOpacity = 1,
label = ~tombstone_code,
color = ~pal_year(year)) %>%
addLegend(pal = pal_year,
values = ~year,
title = "Распределение по годам")4.3 Динамическое отображение переменной
Попробуем нарисовать кладбище в Рашков и посмотрим в динамике, как оно заполнялось:
df %>%
filter(place == "Рашков",
!is.na(year)) %>%
group_by(tombstone_code) %>%
mutate(id = 1:n()) %>%
filter(id == 1) %>%
ungroup() %>%
mutate(value = 1) %>%
arrange(-year) %>%
pivot_wider(names_from = year, values_from = value, values_fill = 0) %>%
pivot_longer(values_to = "value", names_to = "year", `1710`:`1980`) %>%
group_by(tombstone_code, id) %>%
mutate(value = cumsum(value)) ->
rsh_sum
library(leaflet.minicharts)
leaflet() %>%
addTiles() %>%
addLegend(pal = pal_gender,
values = rsh_sum$gender,
title = "") %>%
addMinicharts(lng = rsh_sum$longitude,
lat = rsh_sum$latitude,
chartdata = rsh_sum$value,
time = as.double(rsh_sum$year),
fillColor = pal_gender(rsh_sum$gender),
width = 7)