Plot 2 tmap objects side-by-side

后端 未结 3 462
野性不改
野性不改 2021-01-19 07:13

Example:

I want to plot two tmap plots side by side, which are generated by this code.

library(tmap)
library(gridExtra)

data(World)         


        
3条回答
  •  鱼传尺愫
    2021-01-19 07:43

    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.

提交回复
热议问题