我在一个页面上有一系列我想要的栅格图。每个栅格图应与栅格中指定区域的子图一起使用。 我找到了一些无法使用栅格图
的相关方法
这张地图是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)
目前,我有两个问题:
如何修改绘图区域的显示比例以确保nnshp完全可见?(避免手动调整参数参数)
如何将子图表的位置精确调整为nnshp?我花了这么多时间来修改参数而未能得到它。
当我想获得多个绘图(堆栈栅格图)时,就像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)))