2012-08-26 44 views
5

在R(Win64)中,我尝试使用layout()命令和定义布局的矩阵在单个绘图窗口中绘制光栅图像和直方图的组合。下面是一些示例代码简化的数据:R - 使用矩阵布局绘制多个栅格

library(raster) 

r <- raster(ncols=5, nrows=5, xmn=1, xmx=5, ymn=1, ymx=5) 
rast1 <- rasterize(expand.grid(1:5,1:5), r, rnorm(25)) 
rast2 <- rasterize(expand.grid(1:5,1:5), r, rnorm(25)) 
rast3 <- rasterize(expand.grid(1:5,1:5), r, rnorm(25)) 

layout(matrix(c(1,2,3,4,1,2,3,5,1,2,3,6), 3, 4, byrow=T)) 
layout.show(6) 

plot(rast1, axes=F, ann=F, legend=F, box=F, useRaster=T) 
plot(rast2, axes=F, ann=F, legend=F, box=F, useRaster=T) 
plot(rast3, axes=F, ann=F, legend=F, box=F, useRaster=T) 
hist(rnorm(100), ann=F, axes=F) 
hist(rnorm(100), ann=F, axes=F) 
hist(rnorm(100), ann=F, axes=F) 

正如你所看到的,我想要绘制3幅光栅图像(rast1,rast2,rast3)跨越1列,每3行,旁边有3个直方图,其中每个跨越1列和1行。 layout.show()命令提供了这个想法。

当我运行这段代码,它似乎是第一个图(光栅)命令还重置图形窗口的布局,使所有后续地块的标准3x4格绘制(与5号地块现在重叠第一) 。布局设置看起来很合理,因为我可以在适当的布局中绘制六个直方图。但栅格地块搞砸了。

我怀疑有一些关于{raster}中的plot()命令与layout()命令混淆,但我不知道为什么或如何。有没有其他的方法来实现这种布局?另一个基于光栅的命令?有没有办法重置栅格图之间的布局?

在此先感谢。

+0

'plot'函数实际上是一系列函数,它们将根据第一个参数的类来调度。您需要查看传递给它的对象的类的特定函数。 (可能是'plot.raster') –

回答

4

这里可能存在S4方法和layout()之间的问题。作为一种解决方法,它似乎用图像()代替plot()。使用image(rast1,axes = F,ann = F,asp = 1)代替plot(rast1,axes = F,ann = F,legend = F,box = F,useRaster = T)来获得方形图像映射。

+0

太棒了!奇迹般有效。谢谢dcarlson! –

+0

当您使用图像而不是栅格作为栅格时,如何恢复图例 – jjunju