You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言tmap绘图时tm_text自动放置标签超出区域的解决方法

解决tmap中标签超出绘图区域被截断的问题

我明白你遇到的困扰——auto.placement = T虽然解决了标签重叠的问题,但部分标签跑到绘图区域外被截断了。这里有几个实用的方法可以帮你让标签完全显示:

1. 调整绘图内边距(最直接有效)

tmap的tm_layout里的inner.margins参数可以给绘图区域留出额外空间,让标签有足够的显示位置。你可以给上、右、下、左四个方向设置合适的边距值,比如:

tm_shape(area_r1) + 
  tm_fill("winner", title = "Winner", style = "cat", palette = c("#FFFFB3", "#1F78B4", "#1A9850", "#E7298A")) + 
  tm_legend(text.size = 0.75) + 
  tm_layout("", legend.position = c("left", "bottom"), frame = F, inner.margins = c(0.08, 0.08, 0.08, 0.08)) + # 调整内边距
  tm_borders("grey60") + 
  tm_text("savivald", size = .65, col = "black", auto.placement = T)

你可以根据标签超出的程度调整inner.margins的数值,数值越大,留出的空间越多。

2. 强制标签放在多边形内部

给tm_text加上inside = T参数,强制标签只能显示在对应多边形的内部,从根源上避免标签跑到绘图区域外面:

tm_shape(area_r1) + 
  tm_fill("winner", title = "Winner", style = "cat", palette = c("#FFFFB3", "#1F78B4", "#1A9850", "#E7298A")) + 
  tm_legend(text.size = 0.75) + 
  tm_layout("", legend.position = c("left", "bottom"), frame = F) + 
  tm_borders("grey60") + 
  tm_text("savivald", size = .65, col = "black", auto.placement = T, inside = T) # 强制标签在内部

不过要注意,如果某些多边形面积太小,标签可能还是会显示不全,这时候可以结合缩小字号等方法一起使用。

3. 微调标签大小或字体

如果标签本身尺寸偏大,也容易超出区域,你可以适当缩小size值,或者改用更紧凑的字体:

tm_text("savivald", size = .55, col = "black", auto.placement = T, fontface = "bold") # 缩小字号

也可以尝试加上align = "center"来优化标签的对齐方式,提升显示效果。

4. 手动调整个别问题标签

如果只有少数几个标签出问题,你可以单独对这些标签进行位置微调。比如先筛选出有问题的区域,然后用tm_text的xmod和ymod参数调整偏移量:

# 先绘制基础地图
tm_shape(area_r1) + 
  tm_fill("winner", title = "Winner", style = "cat", palette = c("#FFFFB3", "#1F78B4", "#1A9850", "#E7298A")) + 
  tm_legend(text.size = 0.75) + 
  tm_layout("", legend.position = c("left", "bottom"), frame = F) + 
  tm_borders("grey60") + 
  # 正常显示大部分标签,排除有问题的标签
  tm_text("savivald", size = .65, col = "black", auto.placement = T, 
          filter = !savivald %in% c("Palangos m.", "Klaipedos m.")) +
  # 单独调整问题标签的位置
  tm_text("savivald", size = .65, col = "black", 
          filter = savivald %in% c("Palangos m.", "Klaipedos m."),
          xmod = -0.1, ymod = 0.05) # 调整x和y方向的偏移量

这样就能精准修复个别标签的显示问题。

内容的提问来源于stack exchange,提问作者Helios

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:41:04