
dragmapr lets you drag map regions into any layout you
want, then save that layout as a reproducible image. Open a draggable
map in your browser, move regions and labels around until things look
right, download two small CSV files, and turn them into a
publication-ready ggplot2 map.
Watch a short walkthrough in the dragmap demo vignette, or see the HHS placeholder shapes demo for a complete Spatial Studio workflow.
# install.packages("pak")
pak::pak("PrigasG/dragmapr")library(dragmapr)
# Step 1: open the interactive map in your browser and drag things around
drag_map_prototype(my_sf, region_col = "region", open = TRUE)
# Step 2: after downloading the offset CSVs, render a static image
render_dragged_map(
my_sf,
region_col = "region",
region_offsets = "drag_region_offsets.csv",
label_offsets = "drag_label_offsets.csv",
file = "my-map.png"
)If your data is in longitude/latitude, run
prepare_dragmapr_sf() first:
my_sf <- prepare_dragmapr_sf(my_sf)sf object and pick a column that
groups your regions.drag_map_prototype() to open a browser page — drag
regions and labels wherever you like.render_dragged_map() with those CSVs to get a
static ggplot2 image anytime, without re-running a browser
session.If you used Spatial Studio, you can skip steps 3–4 and call
render_dragmapr_project() with the project ZIP instead:
render_dragmapr_project(
"dragmapr-project.zip",
file = "final-map.png",
width = 10, height = 8, dpi = 300
)Labels are optional. You can show one label per region, supply your own label table, or turn labels off entirely.
# One label per region (default)
drag_map_prototype(my_sf, "region")
# Text-only labels, no marker
drag_map_prototype(my_sf, "region", label_marker = FALSE)
# Circle markers instead of rectangles
drag_map_prototype(my_sf, "region", label_marker_shape = "circle")For longer notes or callout boxes, use
as_drag_annotations():
notes <- as_drag_annotations(data.frame(
label_id = "north-note",
region = "North",
label = "A note about this region",
x = 50000, y = 150000
), connector = TRUE, connector_type = "curve")
render_dragged_map(my_sf, "region",
region_offsets = "drag_region_offsets.csv",
labels = notes,
label_offsets = "drag_label_offsets.csv",
connector_endpoint = "arrow",
file = "annotated-map.png"
)Connector styles: "straight", "elbow",
"curve", "squiggle". Endpoints:
"none" or "arrow".
After installing, go to Addins > Launch dragmapr
in RStudio. Pick your sf object, choose columns and
styling, drag the layout, then click Done. The addin
saves region_offsets and label_offsets to
.GlobalEnv so you can pass them straight to
render_dragged_map().
# Load your sf object first, then launch the addin
regions <- prepare_dragmapr_sf(sf::st_read("regions.shp", quiet = TRUE))
dragmapr_addin()
render_dragged_map(regions, region_col = "name",
region_offsets = region_offsets,
label_offsets = label_offsets,
file = "map.png"
)Run any example to see the package in action without needing your own data:
basic_draggable_map.R — four simple map regionsexplodemap_hhs_labels.R — HHS-style exploded layout
with colors and offsetslabel_nudging.R — nudge labels independently after
moving regionsshiny_draggable_export.R — Shiny app with live preview
and PNG exportshiny_spatial_studio.R — full Spatial Studio: upload
files, switch groupings, drag, exportbranch-bloom-tester.R — test parent/child bloom
animations in isolation# Run all examples in a temp folder
source(system.file("examples", "smoke_examples.R", package = "dragmapr"))Need an export format not available in Spatial Studio? Download the GeoJSON or GeoPackage and open it in Mapshaper to convert.
prepare_dragmapr_sf() to convert longitude/latitude data
before dragging.