如何在R中使用qtm为基于出行量的地图线宽添加图例
解决tmap中线宽图例的显示问题
我来帮你搞定这个tmap里线宽图例的问题!你之前用叠加qtm()的方式确实容易遇到图例不显示的情况,因为qtm()在多图层叠加时,默认不会自动整合第二个图层的图例,而且参数控制不如tmap的标准图层语法灵活。下面给你两种解决方案,优先推荐第一种更可控的方式:
方法一:使用tmap标准图层语法(推荐)
改用tm_shape() + tm_lines()的组合,能更直观地控制图例的显示和样式,代码如下:
library(stplanr) library(tmap) # 加载示例数据 data("flow", package = "stplanr") data("cents", package = "stplanr") # 创建OD线图层 l <- od2line(flow = flow, zones = cents) # 绘制地图并添加线宽图例 tm_shape("Leeds") + tm_borders() + # 显示Leeds底图的边界 tm_shape(l) + tm_lines( lwd = "All", # 将线宽映射到"All"列的出行次数数据 scale = 1/10, # 对应你原来的l$All/10的缩放比例 legend.lwd.show = TRUE, # 强制显示线宽图例 legend.lwd.title = "出行次数", # 设置图例标题 legend.lwd.is.portrait = FALSE # 可选:让图例横向显示(更美观) ) + tmap_options(limits = c(facets.view = 1)) # 修正你原来的语法错误
关键说明:
- 把线宽的映射改为字符串形式的列名(
"All"),而不是直接计算l$All/10,这样tmap能自动识别并生成对应的图例。 scale参数用来控制线宽的缩放比例,和你原来的l$All/10效果一致。- 通过
legend.lwd.*系列参数可以自定义图例的标题、显示方向等样式。
方法二:调整qtm的参数(兼容原有写法)
如果你坚持想用qtm()叠加的方式,可以在第二个qtm()里添加图例相关参数,强制显示线宽图例:
library(stplanr) library(tmap) data("flow", package = "stplanr") data("cents", package = "stplanr") l <- od2line(flow = flow, zones = cents) qtm("Leeds") + qtm( l, lines.lwd = l$All/10, lines.legend = TRUE, # 显示线宽图例 lines.title = "出行次数" # 设置图例标题 ) + tmap_options(limits = c(facets.view = 1)) # 修正语法错误
不过这种方式的图例样式调整空间不如第一种方法大,所以更推荐使用标准图层语法。
内容的提问来源于stack exchange,提问作者Kacper Rossa
相关产品推荐
相关产品推荐

