使用rasterVis和gridExtra

时间:2017-06-24 23:11:37

标签: r layout raster gridextra levelplot

我正在尝试使用levelplot包的rasterVis功能与gridExtra' s grid.arrange一起绘制包含七个栅格的面板。

通过使用以下代码,我几乎得到了我需要的东西:

# load required packages
library(rasterVis)
library(gridExtra)

# load sample raster
f <- system.file("external/test.grd", package="raster")
r <- raster(f)

# create plots
p1 <- levelplot(r, xlab=NULL, ylab=NULL, margin=FALSE)
p2 <- levelplot(r*2, xlab=NULL, ylab=NULL, margin=FALSE,colorkey=FALSE)

# put plots in list
p.list <- list(p1,p2,p2,p2,p2,p2,p2)

# create layout
lay <- rbind(c(1,1,1),
             c(2,3,4),
             c(5,6,7))

# arrange plots
grid.arrange(grobs=p.list, layout_matrix=lay)

产生这个数字:

enter image description here

但是,我仍需要改进一些事项:

  1. 如何减少底行中图表之间的空白?
  2. 如何为六个底部栅格添加单个组合图例,优先放在图的底部?
  3. 使用rasterVisgridExtra可以实现这一目标吗?有没有其他方法可以使用?

1 个答案:

答案 0 :(得分:0)

空白区域是网格边距设置的组合,但也是具有固定宽高比的图形(除非设备本身具有兼容的宽高比,否则它们不能太近)。

关于图例,您可以使用draw.colorkey(),但我可以告诉您需要手动确保颜色匹配,方法是将它们明确地传递给两个图和键。

# load required packages
library(rasterVis)
library(gridExtra)

# load sample raster
f <- system.file("external/test.grd", package="raster")
r <- raster(f)

my_theme <- rasterTheme(region = blues9)

# create plots
p1 <- levelplot(r, xlab=NULL, ylab=NULL, margin=FALSE, par.settings = my_theme)
leg <- p1$legend$right$args$key
p1$legend <- list()
p2 <- levelplot(r*2, xlab=NULL, ylab=NULL, margin=FALSE,colorkey=FALSE, par.settings = my_theme)

# put plots in list
p.list <- list(p1,p2,p2,p2,p2,p2,p2)

# create layout
lay <- rbind(c(NA,1,NA),
             c(2,3,4),
             c(5,6,7),
             c(8,8,8))

leg$col <- my_theme$regions$col
legGrob <- draw.colorkey(key = leg, vp = grid::viewport(height=0.5))
# arrange plots
grid.arrange(grobs=c(p.list, list(legGrob)), layout_matrix=lay,
             vp = grid::viewport(width=0.7,height=1))

(不用说,分面似乎是一个更好的选择)

enter image description here