多层栅格含NA值时facet_*函数失效问题求助
问题分析与解决方案
核心原因
问题本质不是NA导致的分面失效,而是两个栅格图层的数据类型不统一:
- 图层A(含NA的整数矩阵)为
integer类型 - 图层B(全5的矩阵)为
numeric(双精度)类型
tidyterra的geom_spatraster()默认不支持混合数据类型的图层,因此仅绘制第一个图层并抛出警告。
更优解决方案
无需手动转换为data.frame,只需统一所有栅格图层的数据类型即可,推荐直接转成numeric:
library(terra) library(tidyverse) library(tidyterra) m <- matrix(c(1:24,NA), nrow=5, ncol=5) n <- matrix(rep(5,time=25),nrow = 5,ncol = 5) # 统一栅格数据类型为numeric dt <- rast(c(A = rast(m) %>% as.numeric(), B = rast(n))) ggplot()+ geom_spatraster(data = dt, na.rm = TRUE)+ scale_fill_viridis_c(na.value = "transparent")+ facet_grid(~lyr)+ theme_bw()
也可以在创建栅格时直接指定类型:
dt <- rast(c(A = rast(m, type = "numeric"), B = rast(n)))
原手动转data.frame方法的原理
terra::as.data.frame()会自动将所有图层统一转换为numeric类型,从而绕过tidyterra对混合类型的限制,但这种方法在处理大栅格时效率较低,不如直接统一栅格类型高效。
内容的提问来源于stack exchange,提问作者Breeze
相关产品推荐
相关产品推荐

