tm_text 在 tmap 中产生重复的文本

Posted

技术标签:

【中文标题】tm_text 在 tmap 中产生重复的文本【英文标题】:tm_text produces duplicate text in tmap 【发布时间】:2021-12-25 01:40:39 【问题描述】:

我正在尝试使用库 tmap 和 this dataset 制作地图。

按照this discussion,我正在使用以下简单代码:

library(tmap)
library(geobr)
library(sf)

rg = st_as_sf(polygons_regioes_adm_sp)

tm_shape(rg) + 
  tm_polygons("regiao_administrativa",
              legend.show = F) +
  tm_text("regiao_administrativa", size = 1/2)

这会产生以下地图,其中包含重叠的 DUPLICATE 文本。我尝试在tm_text 中插入remove.overlap = TRUE,但这并没有更好的效果。

此外,我收到以下消息:

old-style crs object detected; please recreate object with a recent sf::st_crs()

在这种情况下,我如何获得没有重复文本的地图?

【问题讨论】:

嗨@Marcos Junio,请提供minimal reproducible example,以便我们以最好的方式帮助您。谢谢 嗨@lovalery,感谢您的反馈。我提供了一个链接,可以访问我使用的数据,此外我还提供了我运行以获得该图的简单代码。这已经是一个可重现的例子。任何下载数据的人都可以轻松运行我的示例。 嗨@Marcos Junio。好的。对不起。实际上我不习惯使用.rda 文件。无论如何,主要的是我终于设法阅读了您的文件。所以,请在下面找到我对您的问题的回答。如果可以,请考虑将此答案标记为“已接受”和/或赞成。如果没有,请告诉我出了什么问题。干杯。 【参考方案1】:

您使用tmap 库显示地图的代码很好。问题是sf 对象polygons_regioes_adm_sp 混合了POLYGONMULTIPOLYGON。因此,您只需要通过运行st_cast() 函数来简化sf 对象。

至于投影问题,您只需指定 EPSG 代码即可将 CRS 的最近形式分配给 sf 对象(注意:至于警告消息 - cf.below - 别担心,没关系)

所以,请在代码下方找到正确显示行政区域名称的代码。

library(tmap)
library(sf)
library(dplyr) # please, do not forget to load this library


rg <- polygons_regioes_adm_sp %>% 
  st_set_crs(4674) %>% 
  st_cast()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> Warning: st_crs<- : replacing crs does not reproject data; use st_transform for
#> that

tm_shape(rg) + 
  tm_polygons("regiao_administrativa",
              legend.show = F) +
  tm_text("regiao_administrativa", size = 1/2)

由reprex package (v2.0.1) 于 2021 年 11 月 13 日创建

【讨论】:

@lovarery 我没有注意到数据中的细节。谢谢! 嗨@Marcos Junio。不客气。很高兴我能帮助你。我祝你工作顺利。干杯。

以上是关于tm_text 在 tmap 中产生重复的文本的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft.Web.WebJobs.Publish 在部署包中产生重复的程序集

在 R 中转换 POSIXct 会在 3.5.0 版中产生 NA [重复]

新实体的多个条件插入会在 R2DBC 中产生重复条目错误

c++中产生不重复的随机数

什么是UUID,Java中怎么产生UUID

python 在蟒蛇中产生诗歌