R tmap, форматирование легенды - отображать одно значение в первом ключе легенды

Я не уверен, как и можно ли изменить ключевые легенды следующим образом. Рассмотрим пример:

library(tmap)
data(Europe)

my_map <- 
  tm_shape(Europe) +
  tm_polygons("well_being", textNA="Non-European countries", title="Well-Being Index") +
  tm_text("iso_a3", size="AREA", root=5) +
  tm_layout(legend.position = c("RIGHT","TOP"),
            legend.frame = TRUE)

введите описание изображения здесь

Я пробовал legend.format = list(scientific = TRUE) что-то вроде:

my_map2 <- my_map +
  tm_layout(legend.format = list(scientific = TRUE))

что дает это для легенды:

введите описание изображения здесь

Однако я хочу что-то вроде:

введите описание изображения здесь

По моим данным, 4 - это ноль, и меня попросили выделить его как ноль.


person Valentin    schedule 08.03.2018    source источник


Ответы (2)


Насколько я знаю, это невозможно, если использовать только форматирование tmap легенды - всегда будет маленький разделитель. Либо "к", либо как там вы его перезаписываете на text.separator из legend.format вызова.

Что вам нужно, так это еще один дополнительный шаг в обработке данных - вы должны создать специальную переменную с вашими метками и построить график в соответствии с ней. У вас есть полный контроль над уровнями, поэтому вы можете иметь первый как отдельный ноль.

Для простоты я использую ifelse для разделения на два уровня (плюс НП для неевропейских стран), но вы можете получить больше фантазии, чем это ...

Europe <- Europe %>%
  st_as_sf() %>%  # from sf package - makes Europe behave as a data.frame
  mutate(well_being_adj = ifelse(well_being < 5, "0", "more than five"))

my_map <- 
  tm_shape(Europe) +
  tm_polygons("well_being_adj", textNA="Non-European countries", title="Well-Being Index") +
  tm_text("iso_a3", size="AREA", root=5) +
  tm_layout(legend.position = c("RIGHT","TOP"),
            legend.frame = TRUE)
print(my_map)

введите здесь описание изображения

person Jindra Lacko    schedule 09.03.2018
comment
Это шикарное решение! Вместо ifelse я использовал функцию cut, так как она позволяет определять метки и разрывы. - person Valentin; 09.03.2018
comment
Рад помочь! ifelse был просто взломом, ключевая часть - это создание ведер / меток самостоятельно, с полным контролем над маркировкой :) - person Jindra Lacko; 09.03.2018

Несмотря на то, что решение было решено, другой более практичной альтернативой является изменение уровней в tm_polygons labels

tm_polygons(labels = c ("0", "more than five")

Этот способ также подходит для файлов растров.

person francisco corvalan    schedule 15.04.2019