The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

insetplot

insetplot is an R package to create ggplot2 maps with inset maps easily and flexibly. It handles spatial configuration, aspect ratios, and plot composition automatically.

Quick start

Approach 1: Reuse one plot (simplest)

Use the same plot for the main map and all insets — let insetplot handle sizing and positioning.

library(insetplot)
library(sf)
library(ggplot2)

# Load data
nc <- st_read(system.file("shape/nc.shp", package = "sf"), quiet = TRUE)

# Configure insets: one main + one inset
config_insetmap(
  data_list = list(nc),
  specs = list(
    inset_spec(main = TRUE),
    inset_spec(
      xmin = -84, xmax = -75, ymin = 33, ymax = 37,
      loc = "left bottom", scale_factor = 0.5
    )
  )
)

# Compose
with_inset(
  ggplot(nc, aes(fill = AREA)) +
    geom_sf() +
    scale_fill_viridis_c() +
    theme_void()
)

Approach 2: Custom plot per subplot

Provide specific plots for the main and inset maps.

base_plot <- ggplot(nc, aes(fill = AREA)) +
  geom_sf() + scale_fill_viridis_c() + theme_void()

main_plot <- base_plot +
  ggtitle("Full North Carolina") 

inset_plot <- base_plot +
  ggtitle("Detail Region") 

config_insetmap(
  data_list = list(nc),
  specs = list(
    inset_spec(main = TRUE, plot = main_plot),
    inset_spec(
      xmin = -84, xmax = -75, ymin = 33, ymax = 37,
      loc = "left bottom", scale_factor = 0.5,
      plot = inset_plot
    )
  )
)

with_inset()  # plot argument optional when each spec has its own plot

Installation

devtools::install_github("fncokg/insetplot")

Documentation

Full documentation and more examples are available at insetplot package site.

Core functions

Further examples

Custom positioning and sizing

config_insetmap(
  data_list = list(nc),
  specs = list(
    inset_spec(main = TRUE),
    inset_spec(
      xmin = -84, xmax = -75, ymin = 33, ymax = 37,
      loc_left = 0.05, loc_bottom = 0.05,
      # Use width only; height auto-calculated to preserve aspect ratio
      width = 0.25
    )
  )
)

with_inset(base_plot)

Pass custom plots after configuration

config_insetmap(
  data_list = list(nc),
  specs = list(
    inset_spec(main = TRUE),
    inset_spec(
      xmin = -84, xmax = -75, ymin = 33, ymax = 37,
      loc = "left bottom", scale_factor = 0.5,
    )
  )
)

with_inset(list(main_plot, inset_plot))

Save with correct aspect ratio

ggsave_inset(
  "map_with_insets.png",
  plot = composed_plot,
  # `height` auto-calculated from `main_ratio`
  width = 12,
  dpi = 300
)

Debugging with detailed output

result <- with_inset(plot = my_plot, .return_details = TRUE)
# result$full, result$subplots, result$subplot_layouts, result$main_ratio

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.