Постройте стек растров со значениями выше определенного порога в R ggplot

#r #ggplot2 #r-raster

Вопрос:

У меня есть растровый стек из 8 изображений TIF. Я строю их с помощью gplot . Как вы можете видеть, значения растра составляют от 0 до 8, но невозможно найти место, где значение рН подземных вод составляет около 0.

  1. Итак, что я хочу сделать, так это отфильтровать значения растровых файлов и отобразить только области с pH выше 5.
  2. Кроме того, я хочу пометить области со значениями рН ниже 5 другим цветом (скажем, серым) и добавить соответствующую надпись «Данные недоступны» в легенде. Возможно ли это сделать?

Я попытался сделать что-то вроде pfiles <- pfiles1 > 5 этого, а затем спланировать это. Но это выдает ошибку: Error: Discrete value supplied to continuous scale . Я хочу использовать градиентный цвет.

Код, который я использую:

 library(raster)
library(rasterVis)
library(viridis)
library(ggplot2)
library(ggpubr)
shp = broom::tidy(shapefile("G:/WB_dist_utm.shp"))
rfiles = list.files(path = "G:/GW_IDW", pattern = "*.tif", full.names = TRUE)
atr = c(paste("Year", sep = "_", seq(2005, 2019, 2)))

pfiles1 = stack(rfiles[c(33:40)])
names(pfiles) = atr

ph = gplot(pfiles)   
  geom_raster(aes(fill = value))  
  geom_path(data=shp, aes(long, lat, group=group), color = 'black')  
  facet_wrap(~ variable, ncol = 4)  
  scale_fill_gradientn(colours = rev(magma(30)), na.value = "transparent", n.breaks = 6)  
  theme_bw()  
  theme(axis.text = element_blank(), legend.position = "right", legend.direction = "vertical",
        axis.title = element_blank(),
        legend.key.height = unit(2, "cm"), legend.key.width = unit(1, "cm"),
        legend.title = element_blank(), legend.text = element_text(size = 26), 
        strip.text = element_text(size = 28, face = "bold"),
        plot.title = element_text(size = 23, face = "bold"),
        plot.subtitle = element_text(size = 15), plot.caption = element_text(size = 10))  
  labs(title = "Ground Water Quality in West Bengal: 2005 - 2019",
       subtitle = "pH valuesn",
       caption = "Data source: ENVIS Centre on Control of Pollution Water, Air and Noise.
       http://www.cpcbenvis.nic.in/water_quality_data.html
       Prepared by: Akhilesh Kumar")  
  coord_equal()
 

Вот какой сюжет я получаю. Я хочу отобразить только значения pH > 5 и показать остальную часть региона серым цветом с записью легенды «Данные недоступны».

Спасибо.

введите описание изображения здесь

Комментарии:

1. Попробуй с geom_raster(aes(fill = ifelse(value > 5, value, NA_real_))) .

2. Спасибо вам за ваш комментарий. Но никакая ценность не наносится на карту (и, конечно, никакой легенды). Это всего лишь шейп-файлы.