我正在使用spplot绘制多个shapefile。这是构建数据的数据
docker tag
我的数据包含10年的变量library(raster)
library(randomcoloR)
my.shp <- getData('GADM', country = 'BRA', level = 2)
my.shp$ID<- 1:nrow(my.shp)
,如下所示,其中每一列均为年份
X
我的问题是,绘制该图需要花费大量时间(大约一个小时),并且想知道代码本身是否存在某些固有错误,因此绘制时间太长。我的笔记本电脑有32 GB的RAM。
谢谢
答案 0 :(得分:2)
我没有将此图表与您的spplot
进行比较,因为我不想花一个小时等待它。
相反,我建议使用library(mapdeck)
绘制交互式地图,这需要花费几秒钟的时间。
需要注意的两件事
sp
对象转换为sf
library(raster)
my.shp <- getData('GADM', country = 'BRA', level = 2)
my.shp$ID <- 1:nrow(my.shp)
df <- matrix(sample(100:5000, 55040, replace = T), nrow = 5504, ncol = 10)
df <- data.frame(ID = 1:nrow(my.shp), df)
my.dat <- merge(my.shp, df, by = "ID")
library(sf)
sf <- sf::st_as_sf( my.dat )
library(mapdeck)
set_token( "YOUR_MAPBOX_TOKEN" )
mapdeck() %>%
add_sf(
data = sf
, fill_colour = "GID_2"
)
答案 1 :(得分:1)
您愿意/能够切换到sf
而不是sp
吗?
尽管布局略有不同,但SF图功能比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)
此外,对于Spatial *对象,您可以尝试使用rmapshaper::ms_simplify()
来简化多边形,对于SimpleFeatures,可以尝试使用sf::st_simplify()
来简化多边形,这使您可以根据给定的{{ 1}}。因此,使用简化的多边形,绘制速度也会更快。
原始SpatialPolygon:
dTolerance
“ 25599.2 Kb”
和简化的SimpleFeature:
format(object.size(my.dat_sf), units="Kb")
“ 7864.2 Kb”
绘制简化的SimpleFeature,在装有8GB RAM的计算机上大约需要1分钟。
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")
您也可以尝试使用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)
,但是我敢肯定,性能最高的解决方案将是SF图。
ggplot2