首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用rasterVis和gridExtra组织R中的栅格图

使用rasterVis和gridExtra组织R中的栅格图
EN

Stack Overflow用户
提问于 2019-08-22 11:31:44
回答 1查看 250关注 0票数 1

我在使用rasterVis和gridExtra在R中绘制地图时遇到了困难。这是我的代码的样子(对不起,它肯定不是很优雅):

代码语言:javascript
复制
require(rasterVis)
require(gridExtra)

p1 <- levelplot(avit_bac12, margin=FALSE, xlab=NULL, ylab=NULL,  par.settings = RdBuTheme, main=NULL, scales=list(draw=FALSE))
p2 <- levelplot(avit_bac17, margin=FALSE, xlab=NULL, ylab=NULL,  par.settings = RdBuTheme, main=NULL, scales=list(draw=FALSE))
p3 <- levelplot(avit_eng, margin=FALSE, xlab=NULL, ylab=NULL,  par.settings = RdBuTheme, main=NULL, scales=list(draw=FALSE))
p4 <- levelplot(avit_sf, margin=FALSE, xlab=NULL, ylab=NULL,  par.settings = RdBuTheme, main=NULL, scales=list(draw=FALSE))
p5 <- levelplot(bac12_bac17, margin=FALSE, xlab=NULL, ylab=NULL,  par.settings = RdBuTheme, main=NULL, scales=list(draw=FALSE))
p6 <- levelplot(bac12_eng, margin=FALSE, xlab=NULL, ylab=NULL,  par.settings = RdBuTheme, main=NULL, scales=list(draw=FALSE))
p7 <- levelplot(bac12_sf, margin=FALSE, xlab=NULL, ylab=NULL,  par.settings = RdBuTheme, main=NULL, scales=list(draw=FALSE))
p8 <- levelplot(bac17_eng, margin=FALSE, xlab=NULL, ylab=NULL,  par.settings = RdBuTheme, main=NULL, scales=list(draw=FALSE))
p9 <- levelplot(bac17_sf, margin=FALSE, xlab=NULL, ylab=NULL,  par.settings = RdBuTheme, main=NULL, scales=list(draw=FALSE))
p10 <- levelplot(eng_sf, margin=FALSE, xlab=NULL, ylab=NULL,  par.settings = RdBuTheme, main=NULL, scales=list(draw=FALSE))

p.avit <- levelplot(avit, margin=FALSE, xlab=NULL, ylab=NULL, par.settings = magmaTheme, main="Avitabile et al. (2016)", scales=list(draw=FALSE))
p.bac12 <- levelplot(bac12, margin=FALSE, xlab=NULL, ylab=NULL, par.settings = magmaTheme, main="Baccini et al. (2012)", scales=list(draw=FALSE))
p.bac17 <- levelplot(bac17, margin=FALSE, xlab=NULL, ylab=NULL, par.settings = magmaTheme, main="Baccini et al. (2017)", scales=list(draw=FALSE))
p.eng <- levelplot(eng, margin=FALSE, xlab=NULL, ylab=NULL, par.settings = magmaTheme, main="Englund et al. (2017)", scales=list(draw=FALSE))
p.sf <- levelplot(sf, margin=FALSE, xlab=NULL, ylab=NULL, par.settings = magmaTheme, main="Soares-Filho et al. (2017)", scales=list(draw=FALSE))

p.list <- list(p.avit, p.bac12, p.bac17, p.eng, p.sf,
               p1, p2, p3, p4, p5, p6, p7, p8, p9, p10)

lay <- rbind(c(NA,  2,  3,  4,  5),
             c(1,   6,  7,  8,  9),
             c(2,   NA, 10, 11, 12),
             c(3,   NA, NA, 13, 14),
             c(4,   NA, NA, NA, 15))

grid.arrange(grobs=p.list, layout_matrix=lay,
         vp = grid::viewport(width=0.4,height=0.3))

我希望它会返回如下内容:

..。但相反,地图的大小变得混乱,我得到了这样的结果:

对如何解决这个问题有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-22 12:30:01

问题是layout_matrix中的一些数字是重复的。重复数字意味着绘图应覆盖网格中具有相同数字的单元格。由于每个图都应该占据网格中的一个单元格,因此布局矩阵中的任何数字都不应重复。如果绘图需要放置在两个位置,请将其传递给grid.arrange两次,但确保layout_matrix包含唯一的数字(如果需要,还可以包含NA)。示例更简单:

代码语言:javascript
复制
library(ggplot2)
library(gridExtra)
p <- ggplot(iris, aes(x=Sepal.Width, y=Sepal.Length, color=Species)) + geom_point(show.legend = FALSE)

lay1 <- rbind(c(NA, 1,2), 
              c(2,3, NA))
grid.arrange(p,p,p, layout_matrix=lay1) 
# adding a 4th plot in the above grid.arrange call results with error

lay2 <- rbind(c(NA, 1,2), 
              c(3,4, NA))
grid.arrange(p,p,p,p, layout_matrix=lay2)

lay3 <- rbind(c(1,1,NA,2),
              c(1,1,3, NA))
grid.arrange(p,p,p, layout_matrix=lay3)

这三个示例应该给出以下图:

lay1:

lay2:

lay3:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57601701

复制
相关文章

相似问题

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