【问题标题】:Arrange odd number of plots using rasterVis and gridExtra使用 rasterVis 和 gridExtra 排列奇数图
【发布时间】:2017-06-26 01:13:55
【问题描述】:

我正在尝试使用rasterVis 包的levelplot 函数结合gridExtragrid.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)

产生这个数字:

不过,还有一些地方需要改进:

  1. 如何减少底部行图之间的空白?
  2. 如何为六个底部栅格添加单个组合图例,优先放置在图的底部?

这可以使用rasterVisgridExtra 实现吗?有没有其他方法可以使用?

【问题讨论】:

  • 为每个图提供边距并根据需要减少它。
  • @Masoud,感谢您的建议。但是,如果我添加lattice.options( layout.heights=list(bottom.padding=list(x=0), top.padding=list(x=0)), layout.widths=list(left.padding=list(x=0), right.padding=list(x=0)) ),它仍然不起作用

标签: r layout raster gridextra levelplot


【解决方案1】:

空白是格子边距设置的组合,也是具有固定纵横比的图(它们不能太靠近,除非设备本身具有兼容的纵横比)。

关于图例,您可以使用 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))

(不用说,刻面似乎是更好的选择)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    相关资源
    最近更新 更多