使用tmap绘制地图出现重复重叠文本标签及旧CRS警告如何解决?
解决方案
1. 消除旧CRS警告
你收到的old-style crs object detected警告是因为数据集存储的CRS格式为旧版sf标准,执行以下代码即可更新格式消除警告:
rg <- st_transform(rg, st_crs(rg))
2. 解决标签重复重叠问题
该问题通常由两类原因导致,对应解决方案如下:
原因1:同一行政区对应多个几何要素
很多行政区划数据集会将行政区的飞地、破碎地块单独存储为一行数据,导致同一个行政区名称对应多个多边形,绘制时每个多边形都会生成一个标签,本质上是重复生成而非单纯重叠。
解决方案:先对空间数据按行政区名称去重,保留每个行政区的首个几何要素即可:
library(dplyr) rg <- distinct(rg, regiao_administrativa, .keep_all = TRUE)
原因2:标签自动布局规则未优化
如果去重后仍有重叠,可调整tm_text的布局参数,优先使用自动布局功能而非仅开启重叠移除:
tm_shape(rg) + tm_polygons("regiao_administrativa", legend.show = F) + tm_text("regiao_administrativa", size = 0.3, # 适当缩小字号降低重叠概率 auto.placement = TRUE, # 开启自动布局,自动调整标签位置避免重叠 remove.overlap = TRUE, # 移除仍然重叠的标签 overlap.limits = c(0.05, 0.05)) # 仅允许最多5%的标签面积重叠
3. 进阶优化方案
如果上述调整仍不满足需求,可单独计算每个行政区的质心,将文本标签绘制在质心位置,避免异形多边形导致的标签位置异常:
# 计算行政区质心 rg_centroid <- st_centroid(rg) # 绘制地图 tm_shape(rg) + tm_polygons("regiao_administrativa", legend.show = F) + tm_shape(rg_centroid) + tm_text("regiao_administrativa", size = 0.3, auto.placement = TRUE, remove.overlap = TRUE)
内容的提问来源于stack exchange,提问作者Alien
相关产品推荐
相关产品推荐

