Creates interactive draggable plots from grouped projected
'sf' geometry. The primary deliverable is a browser-based 'D3' helper
where regions and labels can be moved freely; users drag, then copy or
download the resulting offset tables. Labels can be derived
automatically with make_region_labels(), supplied directly with
as_drag_labels(), and their moved positions saved and restored with
read_label_state() and apply_label_state(). Hierarchical spatial
datasets are supported via hierarchy detection, upload profiling,
make_hierarchy_key(), and inherit_layout(), which recommend parent-child
groupings and propagate parent-level drag offsets to finer child groupings.
Automatic starting layouts are provided by suggest_offsets() using
radial, grid, or directional algorithms. Spatial file diagnostics are
available through dragmapr_diagnostics(). When a reproducible static
image is also needed, render_dragged_map() reconstructs the layout as
a 'ggplot2' plot from the source geometry plus the exported offset
tables. Project bundles can be written with write_dragmapr_project()
and rendered with render_dragmapr_project(). The interactive layer is
built on the 'D3' library: Bostock, Ogievetsky and Heer (2011)
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.