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

使用R的tmap包绘制地理地图的布局与分辨率优化问题

tmap小多图问题快速修复指南

布局无法2行4列排列

  • 用tm_facets()直接指定行列数:在绘图代码里添加tm_facets(nrow = 2, ncol = 4),强制分面为2行4列。如果是用tmap_arrange()组合多个独立地图,要确保每个子图尺寸一致,同时指定ncol=4, nrow=2参数。
  • 示例代码:
# 给nc添加8个随机变量
nc$var1 <- rnorm(nrow(nc))
nc$var2 <- rnorm(nrow(nc))
nc$var3 <- rnorm(nrow(nc))
nc$var4 <- rnorm(nrow(nc))
nc$var5 <- rnorm(nrow(nc))
nc$var6 <- rnorm(nrow(nc))
nc$var7 <- rnorm(nrow(nc))
nc$var8 <- rnorm(nrow(nc))

# 绘制2行4列的分面图
tm_shape(nc) +
  tm_polygons(col = paste0("var", 1:8)) +
  tm_facets(nrow = 2, ncol = 4)

图例与地图重叠

  • 把图例移到地图外部:在tm_layout()里设置legend.outside = TRUE,再用legend.outside.position指定位置(比如"right"或"bottom"),配合legend.width控制图例宽度,避免挤占地图空间。
  • 示例:
tm_layout(legend.outside = TRUE, legend.outside.position = "right", legend.width = 0.1)

字体过小

  • 全局调整字体大小:在tm_layout()中设置text.size(比如1.2),也可以单独指定legend.text.size、title.text.size等参数细化调整。
  • 示例:
tm_layout(text.size = 1.2, legend.text.size = 0.9, title.text.size = 1.1)

地图过度放大

  • 强制所有子图使用同一坐标范围:在tm_facets()里加free.coords = FALSE,避免单个子图自动缩放。也可以用tm_layout(asp = 1)保持地图的宽高比,防止拉伸变形。

分辨率低于教程示例

  • 导出时指定高分辨率:用tmap_save()导出图片,设置dpi=300(或更高),同时匹配合适的width和height参数,保证输出清晰度。
  • 示例:
my_map <- tm_shape(nc) +
  tm_polygons(col = paste0("var", 1:8)) +
  tm_facets(nrow = 2, ncol = 4, free.coords = FALSE) +
  tm_layout(legend.outside = TRUE, text.size = 1.2)

tmap_save(my_map, filename = "nc_facets_highres.png", width = 12, height = 8, dpi = 300)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:01:00