График R :: tmap и отображение значений NA в легенде - PullRequest
0 голосов
/ 18 января 2019

Я хочу отобразить точечные данные с результатами подсчета птиц. Размер точки должен быть масштабирован в соответствии с количеством подсчитанных птиц. Если область не была подсчитана, 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 не отображаются? И как мне получить хороший вывод легенды?

enter image description here

Моя цель - достичь этого:

enter image description here

Название вида птиц должно быть дано в виде жирного названия легенды с дополнительной надписью «Anzahl» для символов легенды ниже. В идеале символ x для NA должен быть таким. Я могу вставить (i) из цикла в качестве заголовка легенды с title.size, но как мне получить второй заголовок в легенде. Дополнительный вопрос: можно ли установить размер точек в определенном диапазоне? Чтобы очень маленькие числа имели минимальный размер на карте?

1 Ответ

0 голосов
/ 27 января 2019

Я решил это сам, используя обходной путь:

Я добавил дополнительный слой и выбрал только данные с пропущенными значениями.Затем я добавил дополнительный элемент легенды, используя 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") 
...