使用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
相关产品推荐
相关产品推荐

