Как отобразить только некоторые названия стран с tm_text в R - PullRequest
0 голосов
/ 28 октября 2019

Я создал карту Африки в R, используя tmap, показывающую некоторые числовые переменные, но я хотел бы показать названия стран только для стран, где числовая переменная не равна 0.

Итак, я создал цветовой вектор, содержащий значение «черный», когда числовое значение было> 0, и NA, когда оно было = 0. Для многих функций это позволит отображать только «черные» метки, а не NA, но при tm_text значения NA отображаются на карте белым цветом.

Изображение карты

Я пытался использовать несколько опций tm_text, но ничего не получалось. Если я заменяю NA на имя цвета, оно работает, ярлыки отображаются в указанном мной цвете, но NA не позволяет заставить метки исчезать.

spdf_africa <- ne_countries(continent = 'africa',type="map_units",scale = "medium", returnclass = "sf")

xx<-numeric(length=57)
xx[match(names(tole),spdf_africa$name)]<-tole
xxcol<-xx
xxcol[xx>0]<-"black"
xxcol[xx==0]<-NA

afric=spdf_africa
afric$studies<-xx
afric$studiesTF<-xxcol

tm_shape(afric)+tm_fill(col="studies",title="Nb",style="cat")+tm_text("iso_a3",col="studiesTF",size=0.8)+tm_borders()

Конечно, я мог бы использовать бледныйжелтый как цвет метки для стран, которые я не хочу отображать, но эти метки все равно будут видны, когда они перекрываются с границами или соседними странами.

Есть ли способ сделать это более элегантно?

Спасибо

1 Ответ

1 голос
/ 28 октября 2019

Существует, как обычно, много разных решений. Вы можете просто создать еще один африканский фрейм данных (sfc), только с нужными вам функциями, то есть x> 0 и перейти к

tm_shape(afric) + 
    tm_fill(col="studies",title="Nb",style="cat") + 
    tm_borders() + 
tm_shape(afric_selection) + 
    tm_text("iso_a3)

Воспроизводимый пример

# load library
library(tmap)
# get world data set (sf)
data(World)
# create two shapes, one with border, one with selection (life expectancy bigger then 80 years) and only text
tm_shape(World) + tm_borders() +
  tm_shape(World[World$life_exp > 80, ]) + tm_text("iso_a3")

Или способ Tidyverse

tm_shape(World) + 
    tm_borders() + 
tm_shape(World %>% filter(life_exp > 80)) + 
  tm_text("iso_a3")
...