1

下面是一个非常有用的例子。我已经拼凑了在 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 和 viewport 我的电脑在打印插图时会停止。我究竟做错了什么?您会注意到,我什至努力降低插入插图的国家形状文件的分辨率。

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

提前致谢。

4

1 回答 1

0

如果您正在寻找的是*这个图片查看您正在简化源代码的第一个块:

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

现在,看看 p2 块

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

它使用简化的版本,ind0而不是ind01。我的旧 Mac Air 挂在原版上,但在更正 p2 中的数据参数后不到一分钟就完成了。

于 2016-11-04T06:32:49.557 回答