我使用tmap创建了一张R中的非洲地图,显示了一些数字变量,但我只想显示数字变量不为0的国家的名称。
因此,我创建了一个颜色向量,当数值>0时包含值"black",当数值=0时包含NA。对于许多函数,这将允许只显示"黑色"标签,而不显示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()
当然,我可以用淡黄色作为我不想显示的国家的标签颜色,但当这些标签与边境或邻国重叠时,它们仍然可见。
有什么方法可以更优雅地做到这一点吗?
谢谢
和往常一样,有许多不同的解决方案。你只需要创建另一个非洲数据帧(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")
或者反方向
tm_shape(World) +
tm_borders() +
tm_shape(World %>% filter(life_exp > 80)) +
tm_text("iso_a3")