Вы готовы / можете переключиться на sf
вместо sp
?
Функция sf plot значительно быстрее, чем spplot, хотя раскладка немного отличается.
library(sf)
my.dat_sf <- st_as_sf(my.dat)
plot(my.dat_sf[rev(variable.names)], max.plot=10, breaks=c(seq(from = 100, to = 5000, by = 500),5000),
pal = distinctColorPalette(length(seq(from = 100, to = 5000, by = 500))),
main = "TEST", border=NA, key.pos=4)
Кроме того, вы можете попытаться упростить многоугольник с помощью rmapshaper::ms_simplify()
для пространственных * -объектов или sf::st_simplify()
для SimpleFeatures, что позволяет вам немного уменьшить размер объекта в зависимости от заданного dTolerance
. Таким образом, построение графиков также будет быстрее с упрощенными полигонами.
Оригинальный SpatialPolygon:
format(object.size(my.dat_sf), units="Kb")
"25599,2 Кб"
и упрощенная SimpleFeature:
dat_sf_simple <- st_transform(my.dat_sf, crs = 3035)
dat_sf_simple <- st_simplify(dat_sf_simple, dTolerance = 1000, preserveTopology = T)
dat_sf_simple <- st_transform(dat_sf_simple, crs = 4326)
format(object.size(dat_sf_simple), units="Kb")
"7864,2 Кб"
Составьте график упрощенной SimpleFeature, который занимает около 1 минуты на моей машине с 8 ГБ ОЗУ.
plot(dat_sf_simple[rev(variable.names)], max.plot=10, breaks=c(seq(from = 100, to = 5000, by = 500),5000),
pal = distinctColorPalette(length(seq(from = 100, to = 5000, by = 500))),
main = "TEST", border=NA, key.pos=4)
Вы также можете попробовать ggplot2
, но я уверен, что наиболее эффективным решением будет sf plot.
library(ggplot2)
library(dplyr)
library(tidyr)
dat_sf_simple_gg <- dat_sf_simple %>%
dplyr::select(rev(variable.names), geometry) %>%
gather(VAR, SID, -geometry)
ggplot() +
geom_sf(data = dat_sf_simple_gg, aes(fill=SID)) +
facet_wrap(~VAR, ncol = 2)