繁体   English   中英

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

[英]Ploting 3 maps in 2 rows using R tmap package

我正在尝试使用tmap程序包制作的3张地图来保存地块,上面的一个较大的地图位于顶部,而另外2个则在底部,如上述示例所示: 在此处输入图片说明

但是,使用该程序包提供的tmap_arrange()进行此类操作,可以得到以下结果:

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)

在此处输入图片说明

我尝试使用许多选项,例如将地图导出为图像,然后使用par()和/或split.screen()将其再次导入R以组成完整图像,但也无法正常工作。 有什么方法可以解决此问题并获得想要的结果?

提前致谢!

一种骇人听闻的方法是使用grid包功能。 抓取每个图解/地图的输出,并将其存储为gTree对象,然后尝试将新对象排列在网格中。

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参数://但这也许使您处于一些探索的方向,或者其他人可以编辑/改进此答案。

# Save the plot
ggsave(filename = "tmap-arrange-grid-1.png", 
       width = 10, height = 6, units = "cm", dpi = 150)

在此处输入图片说明

请注意,起初我以为我可以像在tmap_arrange(p1, NULL, p2, p3, nrow = 2)一样向tmap_arrange添加一个NULL对象来进行探索,但不幸的是,它不接受它。


这个相关问题中得到启发的另一种方法可能是遵循以下思路:

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))

在此处输入图片说明

再说一次,在这里,我没有时间去探索如何完美地对齐地块,但是其他人可能会改善这个答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM