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

tmap v4中tm_facets的as.layers=TRUE是否被禁用?代码适配咨询

tmap v4中tm_facets的as.layers参数相关问题

问题描述

之前在tmap v3中,可通过tm_facets()的as.layers参数实现两种地图效果:

  • as.layers = FALSE:生成各省份的网格分面地图
  • as.layers = TRUE:将每个省份作为独立图层添加到交互式地图中

原实现代码如下:

library(tmap)
library(sf)
data(NLD_muni)

# 各省份的网格分面地图
tmap_mode("view")
tm_shape(NLD_muni) +
  tm_polygons("employment_rate") +
  tm_facets("province", as.layers = FALSE)

# 每个省份作为独立图层的地图
tmap_mode("view")
tm_shape(NLD_muni) +
  tm_polygons("employment_rate") +
  tm_facets("province", as.layers = TRUE)

疑问:tmap v4中是否已禁用tm_facets的as.layers = TRUE选项?这是bug还是需要更新代码来实现原有效果?


解答

tmap v4确实移除了tm_facets()中的as.layers参数,这不是bug,属于版本迭代后的API调整,需要更新代码来实现原有效果:

1. 生成各省份的网格分面地图(对应原as.layers = FALSE)

tmap v4中tm_facets()默认就是网格分面模式,直接指定分面字段即可:

library(tmap)
library(sf)
data(NLD_muni)

tmap_mode("view")
tm_shape(NLD_muni) +
  tm_polygons("employment_rate") +
  tm_facets(by = "province")

2. 生成每个省份作为独立交互式图层的地图(对应原as.layers = TRUE)

需要通过拆分数据并逐个添加图层的方式实现,以下是两种可行方案:

方案一:基础循环实现

library(tmap)
library(sf)
data(NLD_muni)

tmap_mode("view")
# 按省份拆分空间数据
province_sf_list <- split(NLD_muni, NLD_muni$province)

# 初始化地图对象
interactive_map <- tm_shape(province_sf_list[[1]]) + 
  tm_polygons("employment_rate", name = names(province_sf_list)[1])

# 循环添加剩余省份图层
for (i in seq_along(province_sf_list)[-1]) {
  interactive_map <- interactive_map + 
    tm_shape(province_sf_list[[i]]) + 
    tm_polygons("employment_rate", name = names(province_sf_list)[i])
}

interactive_map

方案二:用purrr包简化代码

library(tmap)
library(sf)
library(purrr)
data(NLD_muni)

tmap_mode("view")
# 拆分数据并批量添加图层
split(NLD_muni, NLD_muni$province) %>%
  reduce(
    .f = function(map_obj, sf_data) {
      map_obj + tm_shape(sf_data) + tm_polygons("employment_rate", name = unique(sf_data$province))
    },
    .init = tm_shape(NLD_muni[0,]) + tm_polygons()  # 初始化空地图
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 19:46:16