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

如何在tmap栅格列表绘图中让NA/缺失值显示为透明?

解决tmap栅格绘图中NA值不透明的问题

问题根源

你已经定义了将值<=0.5转为NA的函数replace_values,但没有将处理后的栅格结果保存并用于绘图,依然使用了原始的未处理栅格(原始栅格里没有NA,所有单元格都会被渲染),导致非红蓝区域无法透明。

修正步骤

  1. 保存处理后的栅格对象
  2. 使用处理后的栅格进行绘图,确保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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 14:35:20