График R::tmap и отображение значений NA в легенде
Я хочу сопоставить точечные данные с результатами подсчета птиц. Размер точки должен быть масштабирован в соответствии с количеством подсчитанных птиц. Если область не была подсчитана, x должен отображаться для значений NA. Как мне построить эти данные и получить хорошую легенду с помощью пакета tmap?
Это похожий пример:
rm(list=ls(all=TRUE))
library(tmap)
data(World, metro)
# put population size pop2020 to NA for some cities
metro$pop2020[10:300] <- NA
# add column with code for the shape of the symbol (21 for data available, 4 for NA)
metro$shape_symbol <- 21
metro[is.na(metro$pop2020), ]$shape_symbol <- 4
tm_shape(World) + tm_fill()+
tm_shape(metro) +
tm_symbols(
size = "pop2020",
col = "black",
shape = "shape_symbol", # use column shape_symbol in metro for the symbol
# shapeNA = "4", # should plot NA as cross by default - didn´t work for me
title.size = "subtitle",
legend.size.is.portrait=TRUE) +
tm_layout(legend.bg.color = "gray",
legend.frame = "black")
Который дает этот вывод. Почему значения NA не отображаются? И как мне получить хороший вывод легенды?
Моя цель - достичь этого:
Название вида птиц должно быть дано в виде жирного названия легенды с дополнительной надписью "Anzahl" для символов легенды ниже. В идеале символ x для NA должен быть таким. Я могу вставить (i) из цикла в качестве заголовка легенды с title.size, но как мне получить второй заголовок в легенде. Дополнительный вопрос: можно ли установить размер точек в определенном диапазоне? Чтобы очень маленькие числа имели минимальный размер на карте?
1 ответ
Я решил это сам, используя обходной путь:
Я добавил дополнительный слой и выбрал только данные с пропущенными значениями. Затем я добавил дополнительный элемент легенды, используя tm_add_legend.
data(World, metro)
# put population size pop2020 to NA for some cities
metro$pop2020[10:300] <- NA
tm_shape(World) + tm_fill()+
tm_shape(metro) +
tm_symbols(
size = "pop2020",
col = "black",
title.size = "subtitle",
legend.size.is.portrait=TRUE) +
tm_shape(metro[is.na(metro$pop2020),]) +
tm_dots(shape=4, size = 0.5, border.lwd = 0.5) +
tm_layout(legend.bg.color = "gray",
legend.frame = "black") +
tm_add_legend(type="symbol", shape =4, labels = "not available", size = 0.5, border.lwd = 0.5, col = "black")