Использование grid.newpage для создания карты ggplot с картой-врезкой

Следуя очень полезному примеру здесь. Я собрал код для карты, созданной в ggplot, со вставкой.

# Clear WD
rm(list=ls())

library(sp)
library(ggplot2)
library(raster)
library(rgeos)
library(gridExtra)

# Download the Level 0 Map for Inset
ind0 <- getData("GADM", country="IDN", level=0) 
    # Decrease Resolution of the National Map for the Inset
    ind01<- gSimplify(ind0, tol=.1)

# Download level 2 Map 
ind2 <- getData("GADM", country="IDN", level=2) # ucdavis site

jawa  <- (ind2[grep(x=ind2$NAME_1, pattern="Jawa"),]) # subset to island of Jawa

# Extent rectangle for inset map
pol <- data.frame(xmin=114,xmax=119, ymin=-6.5 ,ymax=-5)

batang <- jawa[which(jawa@data$NAME_2=="Batang"),]
    munnames <- coordinates(batang) # get center coordinates of 
    munnames <- data.frame(munnames) # convert matrix format munnames object to data.frame
    munnames$label <- batang@data$NAME_2


# Main Map
p1 <- ggplot() + geom_polygon(data=jawa, aes(long+0.008,lat-0.005, group=group), fill="#9ecae1") + coord_equal()+theme_bw() + xlab("")+ylab("") +  theme(axis.text.y =element_text(angle = 90, hjust=0.5)) + geom_polygon(data=batang, aes(long, lat, group=group), fill="coral1") + geom_text(data=munnames, aes(x=X1, y=X2+.3,label=label), size=3, colour="grey20", family="Times") + guides(fill=FALSE) + annotate("text", x=108.5, y=-5.5, label="Island of Java", family="Times") + scale_x_continuous(breaks=seq(104, 116, 2), labels=c(paste(seq(104, 116, 2),"°E", sep=""))) + scale_y_continuous(breaks=seq(-9, -5, 1), labels=c(paste(seq(-9, -5, 1),"°N", sep="")))

#Inset
p2 <- ggplot() + geom_polygon(data=ind0, aes(long,lat,group=group), fill="#9ecae1") + coord_equal() + theme_bw() + labs(x=NULL,y=NULL) + geom_rect(data = pol, aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax), alpha=0, colour="red", size = 1, linetype=1) + theme(axis.text.x =element_blank(),axis.text.y= element_blank(), axis.ticks=element_blank(),axis.title.x =element_blank(), axis.title.y= element_blank())

Вот тут я сталкиваюсь с проблемой. Используя grid.newpage и область просмотра, мой компьютер зависает, когда он начинает печатать вставку. Что я делаю не так? Вы заметите, что я даже приложил усилия, чтобы уменьшить разрешение национального шейп-файла, который идет во врезке.

png(file="cj3.png",w=1800,h=1800, res=300, bg = "transparent")
grid.newpage()
    v1<-viewport(width = 1, height = 1, x = 0.5, y = 0.5) #plot area for the main map
    v2<-viewport(width = 0.3, height = 0.3, x = 0.80, y = 0.80) #plot area for the inset map
    print(p1,vp=v1) 
    print(p2,vp=v2)
dev.off()

Заранее спасибо.


person Michael Davidson    schedule 24.07.2015    source источник
comment
откуда IDN_adm2.rds   -  person sckott    schedule 25.07.2015
comment
есть такие штуки... называемые новыми строками...   -  person hrbrmstr    schedule 25.07.2015
comment
Скотт, эта строчка была лишней, и я ее удалил. Извиняюсь. Код для загрузки файлов sp загружает все необходимые данные.   -  person Michael Davidson    schedule 25.07.2015
comment
У меня работает, хотя прямоугольник во вставке не закрывает Java. Попробуйте нарисовать p2 самостоятельно. Мне нужно подождать 5 или 6 секунд, пока рисуется p2.   -  person Sandy Muspratt    schedule 27.07.2015
comment
Спасибо, Сэнди. Так странно. Мой компьютер просто крутится и крутится всякий раз, когда я печатаю p2.   -  person Michael Davidson    schedule 27.07.2015


Ответы (1)


Если вы ищете *this* image посмотрите на свой первый фрагмент, где вы упрощаете исходный код:

ind01<- gSimplify(ind0, tol=.1)

Теперь посмотрите на кусок p2

p2 <- ggplot() + geom_polygon(data=ind0, ...

где используется неупрощенная версия, ind0 вместо ind01. Мой старый Mac Air завис на оригинале, но завершил работу менее чем через минуту после исправления аргумента данных в p2.

person Richard Careaga    schedule 04.11.2016