首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rasterVis -使用levelplot将底部图设置在中间

rasterVis -使用levelplot将底部图设置在中间
EN

Stack Overflow用户
提问于 2020-07-04 23:08:41
回答 2查看 184关注 0票数 1

我正在使用令人敬畏的rasterVis创建一个面板,其中的地图具有相同的范围(即相同的空间覆盖率),但显示不同的功能(即每个地图都有自己的图例)。

到目前为止它看起来是这样的:

代码语言:javascript
复制
library(raster)
library(rasterVis)
library(RColorBrewer)
library(gridExtra)

# make-up data
r <- raster(system.file("external/test.grd", package="raster"))
s <- stack(r, r*2, r*3, r*4, r*5)
names(s) <- paste0("Field ",seq(1,5))

# pre-allocate list
l <- vector("list", length=nlayers(s))

# define theme for plots
my.theme <- rasterTheme(region=brewer.pal(11,'RdYlGn'))

# loop over stack layers to fill list
for (n in (1:nlayers(s))){
  
  l[[n]] <- levelplot(s[[n]], margin=F, main=names(s[[n]]), par.settings=my.theme)
  
}

# plot combined maps
grid.arrange(l[[1]], l[[2]], l[[3]], l[[4]], l[[5]], ncol=3)

请注意,贴图的默认位置为:

代码语言:javascript
复制
a b c
d e

然而,我希望对定位有一个更好的控制。具体地说,我希望将底部的两个面“居中”,以便在绘图的两侧更均匀地分配空白空间。

换句话说,我正在寻找的位置将如下所示:

代码语言:javascript
复制
a b c
 d e

我如何才能做到这一点?我查找了(grid.arrange)的文档,但找不到任何可以解决我的问题的选项。

提前感谢您的任何提示。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-04 23:55:41

这里是一种受this answer启发的cowplot::plot_grid方法

代码语言:javascript
复制
library(cowplot)
top <- plot_grid(l[[1]], l[[2]], l[[3]],
                 ncol=3)
bottom <- plot_grid(NULL, l[[4]], NULL,  l[[5]], NULL,
                    ncol=6, rel_widths=c(0.12,0.34,0.12,0.34,0.06))
plot_grid(top, bottom,
          ncol=1, rel_heights=c(1,1))

您可以修改底部plot_grid调用中的rel_widths,以获得您喜欢的结果。

票数 1
EN

Stack Overflow用户

发布于 2020-07-05 04:54:04

您可以提供一个包含6列的布局,并使用NA作为空白。

代码语言:javascript
复制
library(gridExtra)

p <- ggplot()

grid.arrange(grobs = list(p,p,p,p,p), 
             layout_matrix = rbind(c(1,1,2,2,3,3), c(NA,4,4,5,5,NA)))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62730787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档