Im making a choropleth map from Argentina in which Im going to plot some Data.
I can put the map up with no problems and also plot some data on it. For example like this:
The problem is I think R is rendering the map in too high quality (which I dont need) and the processing time is taking ages. (~3 minutes) To display that choropleth. This is the code im using.
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)
Or alternatively I have tried using something like this to see if it made any difference.
ggplot() + geom_map(data = puntos, aes(map_id = Provincia, fill = Puntos),
map = arg_pv) + expand_limits(x = arg_pv$long , y = arg_pv$lat)
After trying some data im well aware that the code that is making the processing take long is obviously the
expand_limits
As is taking the information for all the 259k data points in the fortify table.
Any ideas to cope with this?
UPDATED for the new way ggplot2 mapping "works" O_o
This:
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
Renders really fast on my system:
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
Try to follow the above idiom vs what you're doing or post the output of dput(puntos)
into your question so it's reproducible. Also: the continued inclusion of the entire RStudio window in your questions is really neither helpful nor minimal.