R中的子图的多个Map

时间:2013-11-23 10:36:28

标签: r plot raster subplot

我在一个页面上有一系列我想要的栅格图。每个栅格图应与栅格中指定区域的子图一起使用。 我找到了一些无法使用栅格图

的相关方法

multiple demo plot graph made by Arcgis

这张地图是Arcgis制作的一个演示,我想用R脚本实现它。

首先,我想尝试一个带有子图图的单个图。 这是我的示例代码。

    require(raster)
    require(rgdal)
    op <- par(no.readonly = TRUE)
    oldwd<-getwd()
    setwd(tempdir())
    plotr<-raster(nrow=405,ncol=485,
                  xmn=-2638000,xmx=2212000,ymn=1872000,ymx=5922000,
                  crs='+proj=aea +lat_1=25 +lat_2=47 +lat_0=0 +lon_0=105 +x_0=0 +y_0=0 +ellps=krass +units=m +no_defs')
    plotr<-setValues(plotr, (coordinates(plotr)[,2]))
    chnshp<-getData('GADM', country="China", level=1)
    chnshp<-spTransform(chnshp,CRS=CRS(projection(plotr)))
    plotr<-mask(plotr,chnshp)
    breaks=seq(min(minValue(plotr)),max(maxValue(plotr)),length.out=10)
    download.file('https://dl.dropboxusercontent.com/s/vzs6166v46de7v7/subplot_frame.zip?dl=1&token_hash=AAF8H3aS64fwU4T_dVBzhQ_OokjGNanvWFTYBZS3IjY4Vg',
                  method='auto',mode="wb",'test.zip')
    unzip('test.zip',exdir=tempdir())
    nnshp<-readShapeSpatial('Nanhaizhudao.shp')

    nanhai<-function()
{
  before_op <- par(no.readonly = TRUE)
  plot(nnshp,add=T)
  par(new=TRUE, oma=c(3.5,3.5,3.4,2.2)
      ,mar=c(2,3,2,1.5)
  )
  layout(matrix(c(0,0,0,0,0,0,
                  0,0,0,0,0,0,
                  0,0,0,0,0,0,
                  0,0,0,0,1,0,
                  0,0,0,0,0,0
  ),nrow=5,byrow=T))

  plot(plotr, xlim =c(1e5, 1.2e+6),ylim =c(1.5e5, 2.475e+06),
       breaks=breaks,box=F,
       legend=F,lwd = 1,axes=FALSE, frame.plot=F,
       col = topo.colors(length(breaks))) 
  par(before_op)
}  
if(as.numeric(dev.cur())>1){graphics.off()}
tiff('test.tif',
     width=12,height=8,units='cm',
     res=600,compression="lzw",pointsize=7)
  par(mar = c(3.5, 3.5, 3, 2.5)) 
  plot(plotr,col = topo.colors(length(breaks)),breaks=breaks,horizontal=F,
       legend.shrink = 0.8,legend.width = 0.6,legend.mar =7,cex=0.1,
       addfun=nanhai,
       xlim=c(xmin(plotr), xmax(plotr)), ylim=c(ymin(plotr), ymax(plotr)))
par(op)
dev.off()
if(as.numeric(dev.cur())>1){graphics.off()}

unlink(tempdir())
setwd(oldwd)

目前,我有两个问题:

  1. 如何修改绘图区域的显示比例以确保nnshp完全可见?(避免手动调整参数参数)

  2. 如何将子图表的位置精确调整为nnshp?我花了这么多时间来修改参数而未能得到它。

  3. 当我想获得多个绘图(堆栈栅格图)时,就像ArcGis制作的地图演示一样,我得到了错误的结果。如何获得它的多重图?

    plot(stack(plotr,plotr),col = topo.colors(length(breaks)),breaks=breaks,horizontal=F,
       legend.shrink = 0.8,legend.width = 0.6,legend.mar =7,cex=0.1,
       addfun=nanhai,
       xlim=c(xmin(plotr), xmax(plotr)), ylim=c(ymin(plotr), ymax(plotr)))
    

0 个答案:

没有答案