Reputation: 423
I have 4 leaflet objects: A, B, C, D. I would like to plot them in a 2 by 2 grid, but I have been having a difficult time trying to do this.
My initial thought was to use ggplot and facet_grid, but ggplot does not know how to deal with objects of class leaflet.
I would appreciate the help!
Upvotes: 9
Views: 4755
Reputation: 1
You may wish to pull out a static image of the 4x4 html output as above. For that you can use the webshot package:
webshot::webshot(html, directory_to_drop_png_of_html)
Upvotes: 0
Reputation: 7232
Leaflets (or any other htmlwidgets) can be combined with htmltools::tagList
.
In this case, a simple html table
can handle the layout:
library(htmltools)
leaflet_grid <-
tagList(
tags$table(width = "100%",
tags$tr(
tags$td(A),
tags$td(B)
),
tags$tr(
tags$td(C),
tags$td(D)
)
)
)
You can put the leaflet_grid
in knitr chunk directly or use
browsable(leaflet_grid)
to render it from the console.
Example with shiny fluid page layout functions:
library(shiny)
leaflet_grid_2 <- fluidPage(
fluidRow(
column(6, A), column(6, B)
),
fluidRow(
column(6, C), column(6, D)
)
)
library(leafsync)
To synchronise zoom on all panels, use sync
:
sync(A, B, C, D)
And latticeView
will create panels without synchronising
latticeView(A, B, C, D)
(see https://r-spatial.github.io/mapview/articles/articles/mapview_05-extras.html)
Upvotes: 11
Reputation: 17
There is a package called "patchwork" which might work out for you. Patchwork is an extension for ggplot so it should work well with your maps. You can arrange plots with simple "+" "/" commands.
see https://cran.r-project.org/web/packages/patchwork/vignettes/patchwork.html
Upvotes: -1