减少shp map chorople的处理时间

时间:2016-05-30 04:42:21

标签: r plot geolocation maps shapefile

我正在制作阿根廷的等值线图,我将在其中绘制一些数据。

我可以毫无问题地放置地图,并在其上绘制一些数据。例如:

enter image description here

问题是我认为R渲染的地图质量太高(我不需要),处理时间也很长。 (~3分钟)显示那个等值线。这是我正在使用的代码。

arg_shp <- readOGR("ARG_adm_shp/ARG_adm1.shp", "ARG_adm1")


puntos <- read.csv("puntos.csv", sep = ",", header = T)

arg_pv <- fortify(arg_shp, region = "NAME_1")

gg <- ggplot() 
gg <- gg + geom_map(data=arg_pv, map=arg_pv, 
                    aes(long, lat, map_id=id),
                    color="#2b2b2b", size=0.15, fill=NA)
gg <- gg + coord_map()
gg <- gg + ggthemes::theme_map()



gg + geom_map(data = puntos, aes(map_id = Provincia, fill = Puntos), 
              map = arg_pv)

或者我尝试使用这样的东西来看看它是否有所不同。

ggplot() + geom_map(data = puntos, aes(map_id = Provincia, fill = Puntos), 
                    map = arg_pv) + expand_limits(x = arg_pv$long , y = arg_pv$lat) 

在尝试了一些数据后,我很清楚正在进行处理的代码需要很长时间才显然是

  

expand_limits

正如获取强化表中所有259k数据点的信息一样。

有任何想法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

UPDATED 为新方式ggplot2映射“工作”O_o

此:

library(maptools)
library(rgdal)
library(raster)
library(rgeos)
library(ggplot2)
library(ggalt)
library(ggthemes)
library(viridis)
library(magrittr)

# as stated in the other answer, this is the same as your shapefile
arg_adm <- raster::getData('GADM', country='ARG', level=1)

# make the polygons a bit less verbose
gSimplify(arg_adm, 0.01, topologyPreserve=TRUE) %>% 
  SpatialPolygonsDataFrame(dat=arg_adm@data) -> arg_adm

# turn them into a data frame
arg_map <- fortify(arg_adm, region="NAME_1")

# use a gd projection for this region
arg_proj <- "+proj=aeqd +lat_0=-37.869859624840764 +lon_0=-66.533203125"

# reproducibly simulate some data
set.seed(1492)
puntos <- data.frame(id=c("Buenos Aires", "Córdoba", "Catamarca", "Chaco", "Chubut",
                          "Ciudad de Buenos Aires", "Corrientes", "Entre Ríos", "Formosa", 
                          "Jujuy", "La Pampa", "La Rioja", "Mendoza", "Misiones", "Neuquén", 
                          "Río Negro", "Salta", "San Juan", "San Luis", "Santa Cruz", 
                          "Santa Fe", "Santiago del Estero", "Tierra del Fuego", "Tucumán"),
                     value=sample(100, 24))

# plot it
gg <- ggplot() 

# necessary in the new world of ggplot2 mapping O_o
gg <- gg + geom_blank(data=arg_map, aes(long, lat))

# draw the base polygon layer
gg <- gg + geom_map(data=arg_map, map=arg_map, 
                    aes(map_id=id),
                    color="#b2b2b2", size=0.15, fill=NA)
# fill in the polygons
gg <- gg + geom_map(data=puntos, map=arg_map,
                    aes(fill=value, map_id=id),
                    color="#b2b2b2", size=0.15)

gg <- gg + scale_fill_viridis(name="Scale Title")
gg <- gg + coord_proj(arg_proj)
gg <- gg + theme_map()
gg <- gg + theme(legend.position=c(0.8, 0.1))
gg

enter image description here

在我的系统上快速渲染

benchplot(gg)

##        step user.self sys.self elapsed
## 1 construct     0.000    0.000   0.000
## 2     build     0.029    0.002   0.031
## 3    render     0.206    0.006   0.217
## 4      draw     0.049    0.001   0.051
## 5     TOTAL     0.284    0.009   0.299

尝试按照上述惯用法与您正在做的事情进行比较,或将dput(puntos)的输出发布到您的问题中,以便它可以重现。另外:在你的问题中继续包含整个RStudio窗口实际上既没有帮助也没有用。