如何在tmap图例中呈现三种不同样式的多边形边界?
问题:如何在tmap中添加边界样式的自定义图例?
用户提供的绘图代码如下:
# import shapefile shape_data <- system.file("shape/nc.shp", package="sf") shape_data <- st_read(shape_data) sample_data <- filter(shape_data, CNTY_ID >2100) shape_area <- st_union(shape_data) #map data tm_shape(shape_data) + tm_borders(alpha = 0.4,lwd = 0.1, col = "blue") + tm_fill(col = "BIR79", style = "equal") + tm_shape(sample_data) + tm_borders(col = "red", lwd = 3, lty = 4) + tm_shape(shape_area) + tm_borders(col = "black", lwd = 2)
该地图包含三种不同样式的多边形边界:蓝色细边框(对应全部县)、红色粗虚线框(对应CNTY_ID>2100的县)、黑色粗边框(对应整体区域范围),需要在图例中添加这三种边界的样式及对应说明,可附加在数据图例旁或单独生成,请教如何用tmap实现?
实现方案
tmap没有直接给tm_borders绑定图例的原生参数,但可以通过tm_add_legend()手动构建自定义线样式图例,精准匹配地图中的边界样式。
修改后的完整代码
library(sf) library(tmap) library(dplyr) # 读取并处理数据 shape_data <- system.file("shape/nc.shp", package="sf") shape_data <- st_read(shape_data) sample_data <- filter(shape_data, CNTY_ID > 2100) shape_area <- st_union(shape_data) # 绘图+添加自定义图例 tm_shape(shape_data) + tm_borders(alpha = 0.4, lwd = 0.1, col = "blue") + tm_fill(col = "BIR79", style = "equal", title = "1979年出生人口") + tm_shape(sample_data) + tm_borders(col = "red", lwd = 3, lty = 4) + tm_shape(shape_area) + tm_borders(col = "black", lwd = 2) + # 手动添加边界样式图例 tm_add_legend(type = "line", labels = c("全部县边界", "重点县边界", "区域整体范围"), col = c("blue", "red", "black"), lwd = c(0.1, 3, 2), lty = c(1, 4, 1), alpha = c(0.4, 1, 1), title = "边界说明")
关键参数说明
type="line":指定图例项为线样式,匹配边界的属性labels:按顺序填写三种边界的说明文字col/lwd/lty/alpha:分别对应地图中三种边界的颜色、线宽、线型、透明度,确保样式完全一致- 若需调整图例位置,可在
tm_add_legend()中加入position=c("right", "top"),或用tm_layout(legend.position=c("right", "top"))统一管理所有图例位置
内容的提问来源于stack exchange,提问作者Ramon_88
相关产品推荐
相关产品推荐

