首页 > 解决方案 > 为什么 spplot 需要这么多时间来处理多个面板

问题描述

我正在使用 spplot 绘制多个 shapefile。这是构建的数据

library(raster)
library(randomcoloR)

my.shp <- getData('GADM', country = 'BRA', level = 2)
my.shp$ID<- 1:nrow(my.shp)

我的数据由一个X10 年的变量组成,如图所示,每列是一年

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")

variable.names <- paste0("X",1:10)

spplot(my.dat, rev(variable.names), col = NA, at = seq(from = 100, to = 5000, by = 500), 
          col.regions = distinctColorPalette(length(seq(from = 100, to = 5000, by = 500))),
          main = list(label = "TEST")) 

我的问题是这个情节需要很长时间(大约一个小时)才能被绘制出来,并且想知道代码本身是否存在固有的错误,以至于绘制时间太长。我的笔记本电脑有 32 GB RAM。

谢谢

标签: rgeospatialrastershapefilesp

解决方案


我没有将这个情节与您的情节进行比较,spplot因为我不想花一个小时等待它。

相反,我建议用它library(mapdeck)来绘制交互式地图,这需要几秒钟。

需要注意的两件事

  1. 你需要一个 Mapbox 访问令牌
  2. 您需要将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"
    )

在此处输入图像描述


推荐阅读