当多层栅格中出现空值时,facet_* 会出现问题

问题描述 投票:0回答:1

当使用

tidyterra
进行多层栅格绘图时,当其中一层具有空值“NA”时,
facet_*
功能似乎无法有效工作。不知道这是一个bug还是有更好的解决方案?

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)

dt <- rast(c(A = rast(m),B = rast(n)))

ggplot()+
  geom_spatraster(data = dt,na.rm = TRUE)+
  scale_fill_viridis_c(na.value = "transparent")+
  facet_grid(~lyr)+
  theme_bw()
! Plotting only layer "A" of class <integer>
Warning message:
Mixed layer classes found in `tidyterra::geom_spat*()`. 

enter image description here

预期成果:

data <- terra::as.data.frame(dt,xy=TRUE) %>% 
  pivot_longer(cols = c(A,B),names_to = 'layer', values_to = 'pre')
head(data)

ggplot(data = data,aes(x=x,y=y,fill = pre))+
  geom_tile(na.rm = TRUE)+
  scale_fill_viridis_c(na.value = "transparent")+
  facet_grid(~layer)+
  theme_bw()

enter image description here

r terra tidyterra
1个回答
0
投票

警告消息表明

dt
的各层并不都具有相同的数据类型。事实上,一个是整数,一个是双精度数:

is.int(dt)
#> [1]  TRUE FALSE

geom_spatraster
不知道如何将相同的美学应用于两种不同的数据类型,因此它只绘制一种。要解决这个问题,我们只需要确保它们都是双打:

as_numeric_matrix <- function(x) matrix(as.numeric(x), ncol = ncol(x))

dt <- rast(c(
  A = rast(as_numeric_matrix(m)),
  B = rast(as_numeric_matrix(n))
))

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.