如何在tmap栅格列表绘图中让NA/缺失值显示为透明?
解决tmap栅格绘图中NA值不透明的问题
问题根源
你已经定义了将值<=0.5转为NA的函数replace_values,但没有将处理后的栅格结果保存并用于绘图,依然使用了原始的未处理栅格(原始栅格里没有NA,所有单元格都会被渲染),导致非红蓝区域无法透明。
修正步骤
- 保存处理后的栅格对象
- 使用处理后的栅格进行绘图,确保
colorNA = NA参数生效
修正后的完整代码
# setup ------------------------------------------------------------------- library(raster) library(tmap) library(purrr) library(dplyr) # produce the data -------------------------------------------------------- # first raster set.seed(123) raster1 <- raster(matrix(runif(100), nrow = 10)) extent(raster1) <- extent(-180, -170, 0, 10) projection(raster1) <- CRS("+proj=longlat +datum=WGS84") # second raster set.seed(456) raster2 <- raster(matrix(runif(100), nrow = 10)) extent(raster2) <- extent(-180, -170, 0, 10) projection(raster2) <- CRS("+proj=longlat +datum=WGS84") rasters <- list(raster1, raster2) %>% map(~ setMinMax(.x)) %>% set_names("1", "2") # function for reclassifying min. values replace_values <- function(raster_layer) { raster_layer[raster_layer <= 0.5] <- NA return(raster_layer) } # 关键:保存处理后的栅格 processed_rasters <- map(rasters, replace_values) # plot the data ----------------------------------------------------------- tm_shape(processed_rasters$`1`) + tm_raster( n = 3, colorNA = NA, # 确保NA值透明 alpha = 0.5, palette = "Blues") + tm_shape(processed_rasters$`2`) + tm_raster( n = 3, colorNA = NA, alpha = 0.5, palette = "Reds") + tm_scale_bar( text.size = 1, position = c("left", "bottom")) + tm_compass( position = c("right", "top"), size = 1.5, text.size = 0.5) + tm_layout( frame = '#999999', legend.show = FALSE)
额外说明
colorNA = NA参数确实会让NA值单元格透明,但必须保证栅格数据中存在NA值- 使用
processed_rasters替代原始rasters后,只有值>0.5的单元格会被渲染,其余区域(NA)会透明显示
内容的提问来源于stack exchange,提问作者Rion Lerm
相关产品推荐
相关产品推荐

