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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:02:44