ggmapinset
library(ggmapinset)
#> Loading required package: sf
#> Linking to GEOS 3.11.2, GDAL 3.6.4, PROJ 9.2.0; sf_use_s2() is TRUE
library(ggplot2)
nc <- sf::st_read(system.file("shape/nc.shp", package = "sf"), quiet = TRUE)
nc
## Simple feature collection with 100 features and 14 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -84.32385 ymin: 33.88199 xmax: -75.45698 ymax: 36.58965
## Geodetic CRS: NAD27
## First 10 features:
## AREA PERIMETER CNTY_ CNTY_ID NAME FIPS FIPSNO CRESS_ID BIR74 SID74
## 1 0.114 1.442 1825 1825 Ashe 37009 37009 5 1091 1
## 2 0.061 1.231 1827 1827 Alleghany 37005 37005 3 487 0
## 3 0.143 1.630 1828 1828 Surry 37171 37171 86 3188 5
## 4 0.070 2.968 1831 1831 Currituck 37053 37053 27 508 1
## 5 0.153 2.206 1832 1832 Northampton 37131 37131 66 1421 9
## 6 0.097 1.670 1833 1833 Hertford 37091 37091 46 1452 7
## 7 0.062 1.547 1834 1834 Camden 37029 37029 15 286 0
## 8 0.091 1.284 1835 1835 Gates 37073 37073 37 420 0
## 9 0.118 1.421 1836 1836 Warren 37185 37185 93 968 4
## 10 0.124 1.428 1837 1837 Stokes 37169 37169 85 1612 1
## NWBIR74 BIR79 SID79 NWBIR79 geometry
## 1 10 1364 0 19 MULTIPOLYGON (((-81.47276 3...
## 2 10 542 3 12 MULTIPOLYGON (((-81.23989 3...
## 3 208 3616 6 260 MULTIPOLYGON (((-80.45634 3...
## 4 123 830 2 145 MULTIPOLYGON (((-76.00897 3...
## 5 1066 1606 3 1197 MULTIPOLYGON (((-77.21767 3...
## 6 954 1838 5 1237 MULTIPOLYGON (((-76.74506 3...
## 7 115 350 2 139 MULTIPOLYGON (((-76.00897 3...
## 8 254 594 2 371 MULTIPOLYGON (((-76.56251 3...
## 9 748 1190 2 844 MULTIPOLYGON (((-78.30876 3...
## 10 160 2038 5 176 MULTIPOLYGON (((-80.02567 3...
ggplot(nc) +
# this is equivalent to the following line:
# geom_sf_inset(fill = "white", map_inset = "none") +
geom_sf(fill = "white") +
geom_sf_inset(aes(fill = AREA), map_base = "none") +
geom_inset_frame() +
coord_sf_inset(inset = configure_inset(
centre = sf::st_centroid(sf::st_geometry(nc)[nc$NAME == "Bladen"]), scale = 1.5,
translation = c(-180, -50), radius = 50, units = "mi"))

ggplot(nc) +
geom_sf(aes(fill = AREA)) +
geom_inset_frame(target.aes = list(fill = "white")) +
geom_sf_inset(aes(fill = AREA), map_base = "none") +
coord_sf_inset(inset = configure_inset(
centre = st_centroid(st_geometry(nc)[nc$NAME == "Yancey"]), scale = 2,
translation = c(100, -120), radius = 50, units = "mi"))

inset1 <- configure_inset(
centre = sf::st_centroid(sf::st_geometry(nc)[nc$NAME == "Bladen"]), scale = 1.5,
translation = c(150, -50), radius = 50, units = "mi")
inset2 <- configure_inset(
centre = sf::st_centroid(sf::st_geometry(nc)[nc$NAME == "Orange"]), scale = 3,
translation = c(30, 120), radius = 30, units = "mi")
ggplot(nc) +
# base map
geom_sf_inset() +
# inset 1
geom_sf_inset(map_base = "none", inset = inset1) +
geom_inset_frame(inset = inset1, colour = "red") +
# inset 2
geom_sf_inset(map_base = "none", inset = inset2) +
geom_inset_frame(inset = inset2, colour = "blue")
