#r #ggplot2 #r-raster
Вопрос:
У меня есть растровый стек из 8 изображений TIF. Я строю их с помощью gplot
. Как вы можете видеть, значения растра составляют от 0 до 8, но невозможно найти место, где значение рН подземных вод составляет около 0.
- Итак, что я хочу сделать, так это отфильтровать значения растровых файлов и отобразить только области с pH выше 5.
- Кроме того, я хочу пометить области со значениями рН ниже 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. Спасибо вам за ваш комментарий. Но никакая ценность не наносится на карту (и, конечно, никакой легенды). Это всего лишь шейп-файлы.