首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用R tmap包绘制2行3张地图

使用R tmap包绘制2行3张地图
EN

Stack Overflow用户
提问于 2018-10-04 13:36:48
回答 1查看 2.7K关注 0票数 4

我试图使用tmap包制作的3幅地图保存一幅图,其中较大的一幅位于顶部,另2幅位于底部,如上面的示例所示:

但是,使用包为这类过程提供的tmap_arrange(),它给出了以下内容:

代码语言:javascript
复制
data(World)
p1 <- tm_shape(World)+tm_polygons()
p2 <- tm_shape(World[World$continent=='South America',])+tm_polygons()
p3 <- tm_shape(World[World$name=='Brazil',])+tm_polygons()

tmap_arrange(p1,p2,p3,nrow=2)

我尝试使用许多选项,比如将地图导出为图像,然后再导入到R中,使用par()和/或split.screen()编写完整的映像,但也不能正常工作。有没有办法解决这个问题,得到想要的结果?

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2018-12-30 22:36:07

一种常见的方法是使用grid包功能。获取每个地块/地图的输出,并将其存储为gTree对象,然后尝试在网格中安排新对象。

代码语言:javascript
复制
library(tmap)
library(cowplot) # for plot_grid() function - good to arrange multiple plots into a grid
library(grid)
library(gridGraphics)

data(World)

tm_shape(World) + tm_polygons()
g1 <- grid.grab()

tm_shape(World[World$continent == 'South America', ]) + tm_polygons()
g2 <- grid.grab()

tm_shape(World[World$name == 'Brazil', ]) + tm_polygons()
g3 <- grid.grab()

# Try to arrange the plots into a grid using cowplot::plot_grid().
# First bind the p2 and p3 as one plot; 
# adjust distance between them by forcing a NULL plot in between.
p23 <- plot_grid(g2, NULL, g3, rel_widths = c(1, -0.7, 1), nrow = 1)
plot_grid(g1, p23, nrow = 2, scale = c(0.8, 1))

不过,我想不出如何使它响应align参数:/但这可能会使您进入某个探索方向,或者其他人可以编辑/改进这个答案。

代码语言:javascript
复制
# Save the plot
ggsave(filename = "tmap-arrange-grid-1.png", 
       width = 10, height = 6, units = "cm", dpi = 150)

注意,最初我认为可以通过向tmap_arrange添加tmap_arrange对象(如tmap_arrange(p1, NULL, p2, p3, nrow = 2) )来探索,但不幸的是,它不接受它。

另一种受this related question启发的方法可能是这样的:

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

grid.newpage()
pushViewport(viewport(layout = grid.layout(nrow = 2, ncol = 2)))
print(p1, vp = viewport(layout.pos.row = 1, layout.pos.col = 1:2))
print(p2, vp = viewport(layout.pos.row = 2, layout.pos.col = 1))
print(p3, vp = viewport(layout.pos.row = 2, layout.pos.col = 2))

同样地,在这里,我没有时间去探索完美地对齐这些情节,但是其他人可能会改进这个答案。

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

https://stackoverflow.com/questions/52648160

复制
相关文章

相似问题

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