Example:
I want to plot two tmap plots side by side, which are generated by this code.
library(tmap)
library(gridExtra)
data(World)
Nice question!
grid.arrange
doesn't support tmap plots (yet?) in the same way it supports ggplot2
plots.
There are two options:
1) Use small multiples by assigning two values to an aesthetic (see examples from tm_facets
). Your plots don't use aesthetics, but you can trick this as follows:
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) Use the grid
package to define viewports:
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))
Another thing, rather than clipping the shape with negative inner margins, you could also use the bounding box arguments inside tm_shape
:
tm_shape(World, projection = "merc", xlim=c(-2e6, 6.5e6), ylim=c(-4e6, 8.5e6)) +
tm_borders(alpha = 0.3, lwd=2)
It produces the same map, but it the code a little cleaner.