Я предлагаю комбинацию base::cut()
, чтобы превратить вашу непрерывную переменную в коэффициент, и ggplot2::scale_fill_manual()
, чтобы дать категориям названные цвета.
Рассмотрим это небольшое изменение в вашем коде:
library(raster)
library(ggplot2)
library(sf)
fr.shp.admin <- getData('GADM', country='FRA', level=0)
fr.shp <- getData('GADM', country='FRA', level=1)
fr.shp.df <- data.frame(fr.shp)
set.seed(123)
dat <- data.frame(
NAME_1 = rep(fr.shp.df$NAME_1, 2),
season = rep(c('a','b'), each = 13),
value = c(sample(0:6, size = 8, replace = T), 0.1, 0.6, 100, 500, 1250,
sample(0:6, size = 8, replace = T), 0.3, 0.7,50, 400, 1700))
fr.shp.sf <- st_as_sf(fr.shp)
fr.shp.admin.sf <- st_as_sf(fr.shp.admin)
temp.shp <- merge(fr.shp.sf, dat, by = 'NAME_1')
temp.shp$value2 = cut(temp.shp$value,
breaks = c(-Inf, 0, 1000, +Inf),
labels = c("low", "medium", "high"))
ggplot() +
geom_sf(data = temp.shp, aes(fill = value2), colour = NA) +
geom_sf(data = fr.shp.admin.sf, fill = NA, col = 'black') +
scale_fill_manual(values = c("low" = "cornflowerblue",
"medium" = "goldenrod2",
"high" = "red")) +
facet_wrap(~season)