В настоящее время, вероятно, проще использовать пакет sf
для построения карт нужного вам типа. Здесь вы можете увидеть несколько примеров https://r-spatial.github.io/sf/articles/sf5.html
Я адаптировал пример оттуда, который показывает, как использовать ggplot2
и его функцию facet_wrap
для создания карты для каждого уровня заданная переменная.
Некоторые шаги, показанные здесь, могут быть необязательными, если у вас уже есть, например, переменная с определенным количеством уровней, которые вы должны фасетить.
library(sf)
library(ggplot2)
library(tidyr)
library(dplyr)
library(classInt)
library(viridis)
# Read example shapefile from sf package
nc <- st_read(system.file("shape/nc.shp", package="sf"))
# subset columns of interest as well as geometry column
# create BIR in which the variables BIR74, BIR79, NWBIR79
# become different levels of it
nc2 <- nc %>% select(BIR74, BIR79, NWBIR79, geometry) %>% gather(VAR, BIR, -geometry)
# HEre i just wanted to create 5 categories for the BIR variable
ints <- classIntervals(nc2$BIR, n = 5, style = "jenks")
nc2 <- nc2 %>% mutate(BIR_cat = cut(BIR, ints$brks, dig.lab=10))
# I just changed the levels's labels to match the output you are looking for
nc2 <- nc2 %>% mutate(values = ifelse(BIR_cat == "(3,1946]", "1",
ifelse(BIR_cat == "(1946,4706]", "2",
ifelse(BIR_cat == "(4706,9087]", "3",
ifelse(BIR_cat == "(9087,16184]", "4",
ifelse(BIR_cat == "(16184,30757]", "5", NA))))))
# Map the spatial data
ggplot() +
geom_sf(data = nc2, aes(fill = values)) +
facet_wrap(~VAR, ncol = 1) +
scale_fill_viridis(discrete=TRUE)