如何在 R 中只显示 tm_text 的一些国家名称
How to display only some country names with tm_text in R
我在 R 中使用 tmap 创建了一张非洲地图,显示了一些数值变量,但我只想显示数值变量不为 0 的国家/地区的名称。
所以我创建了一个颜色向量,当数值大于 0 时包含值 'black',当数值 =0 时包含 NA。对于很多功能,这将允许仅显示 'black' 标签而不显示 NA 标签,但是对于 tm_text,NA 值在地图上显示为白色。
Map image
我尝试使用几个 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 和 go
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")
我在 R 中使用 tmap 创建了一张非洲地图,显示了一些数值变量,但我只想显示数值变量不为 0 的国家/地区的名称。
所以我创建了一个颜色向量,当数值大于 0 时包含值 'black',当数值 =0 时包含 NA。对于很多功能,这将允许仅显示 'black' 标签而不显示 NA 标签,但是对于 tm_text,NA 值在地图上显示为白色。
Map image
我尝试使用几个 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 和 go
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")