4 Работа с картами пакет leaflet
4.1 Визуализация с leaflet
Для начала включим библиотеку:
library("tidyverse")
library("leaflet")
и скачаем датасет:
<- read_csv("https://tinyurl.com/yzfgony9") df
Мы можем нарисовать точки, полученные из кладбища
- в Стародубе:
%>%
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 Раскраска на основании переменной
Мы можем раскрасить наши точки на основании гендерной пренадлежности усопшего:
<- colorFactor("Set1", domain = df$gender)
pal_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 == "Стародуб",
!= "n") %>%
gender 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
<- colorFactor("Set1", domain = c(TRUE, FALSE), ordered = TRUE)
pal_labour
%>%
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
<- colorFactor("Set1", domain = c(TRUE, FALSE), ordered = TRUE)
pal_kadosh
%>%
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 = "Распределение убитых")
Цветом можно задавать не только категориальны данные, но и числовые:
<- colorNumeric("BrBG", domain = df$year)
pal_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)