例:
我想并排绘制两个tmap图,这些图是由此代码生成的。
library(tmap) library(gridExtra) data(World) plot1= tm_shape(World, projection = "merc") + tm_layout("", inner.margins=c(-1.72, -2.05, -0.75, -1.56)) + tm_borders(alpha = 0.3, lwd=2) plot2= tm_shape(World, projection = "merc") + tm_layout("", inner.margins=c(-1.72, -2.05, -0.75, -1.56)) + tm_borders(alpha = 0.3, lwd=2)
plot1
并且plot2
可以作为单个独立地块正常工作:
问题:
我在将两个图并排放置时遇到问题。我试过了:
grid.arrange(plot1, plot2)
通过一个错误Error in arrangeGrob(..., as.table = as.table, clip = clip, main = main, : input must be grob!
。我认为这应该可行(使用gridExtra),因为tmap似乎基于grid graphics system
。
也par(mfrow=c(1,2))
不起作用,因为它仅显示一个图(猜想这是相关的,因为tmap
图不遵循base graphics system
)。
题:
如何同时绘制对象plot1
和plot2
并排(ncol=2
)?
更新:
关于提出的基于网格的解决方案,我得到了重叠的图,而不是两列排列的图。
> sessionInfo() R version 3.1.2 (2014-10-31) Platform: x86_64-apple-darwin13.4.0 (64-bit) locale: [1] de_DE.UTF-8/de_DE.UTF-8/de_DE.UTF-8/C/de_DE.UTF-8/de_DE.UTF-8 attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] tmap_1.0 dplyr_0.4.3 sp_1.1-1 loaded via a namespace (and not attached): [1] assertthat_0.1 class_7.3-11 classInt_0.1-23 colorspace_1.2-6 DBI_0.3.1 digest_0.6.8 e1071_1.6-4 ggplot2_1.0.1 [9] grid_3.1.2 gridBase_0.4-7 gtable_0.1.2 lattice_0.20-29 magrittr_1.5 MASS_7.3-35 munsell_0.4.2 parallel_3.1.2 [17] plyr_1.8.3 proto_0.3-10 R6_2.1.1 raster_2.3-40 RColorBrewer_1.1-2 Rcpp_0.12.2 reshape2_1.4.1 rgdal_0.8-16 [25] rgeos_0.3-11 scales_0.3.0 stringi_1.0-1 stringr_1.0.0 tools_3.1.2
Martijn Tenn.. 5
好问题!
grid.arrange
不支持tmap绘图(还可以吗?)与支持ggplot2
绘图的方式相同。
有两种选择:
1)通过为美学分配两个值来使用较小的倍数(请参阅中的示例tm_facets
)。您的地块没有使用美学,但是您可以按以下方法欺骗它:
tm_shape(World, projection = "merc") + tm_fill(col=c("white", "white")) + tm_layout("", inner.margins=c(-1.72, -2.05, -0.75, -1.56)) + tm_borders(alpha = 0.3, lwd=2)
2)使用grid
包定义视口:
library(grid) grid.newpage() pushViewport(viewport(layout=grid.layout(1,2))) print(plot1, vp=viewport(layout.pos.col = 1)) print(plot2, vp=viewport(layout.pos.col = 2))
另一件事,不是用负的内部边距修剪形状,还可以在其中使用边界框参数tm_shape
:
tm_shape(World, projection = "merc", xlim=c(-2e6, 6.5e6), ylim=c(-4e6, 8.5e6)) + tm_borders(alpha = 0.3, lwd=2)
它产生相同的地图,但是代码更简洁。
好问题!
grid.arrange
不支持tmap绘图(还可以吗?)与支持ggplot2
绘图的方式相同。
有两种选择:
1)通过为美学分配两个值来使用较小的倍数(请参阅中的示例tm_facets
)。您的地块没有使用美学,但是您可以按以下方法欺骗它:
tm_shape(World, projection = "merc") + tm_fill(col=c("white", "white")) + tm_layout("", inner.margins=c(-1.72, -2.05, -0.75, -1.56)) + tm_borders(alpha = 0.3, lwd=2)
2)使用grid
包定义视口:
library(grid) grid.newpage() pushViewport(viewport(layout=grid.layout(1,2))) print(plot1, vp=viewport(layout.pos.col = 1)) print(plot2, vp=viewport(layout.pos.col = 2))
另一件事,不是用负的内部边距修剪形状,还可以在其中使用边界框参数tm_shape
:
tm_shape(World, projection = "merc", xlim=c(-2e6, 6.5e6), ylim=c(-4e6, 8.5e6)) + tm_borders(alpha = 0.3, lwd=2)
它产生相同的地图,但是代码更简洁。