This gallery exists for two reasons: to show the range of draggable
plots that dragmapr can create, and to stress the package
with different geometry shapes before real projects depend on it.
example_hhs_layout() bundles the small pieces needed
from the explodemap paper workflow: HHS membership, region names, region
colors, and the published display-offset CSV. The geometry itself is a
lightweight projected fixture.
library(dragmapr)
hhs <- example_hhs_layout()
render_dragged_map(
hhs$states,
region_offsets = hhs$region_offsets,
region_col = "hhs_region",
labels = hhs$labels,
label_offsets = hhs$label_offsets,
region_palette = hhs$region_colors,
region_labels = hhs$region_names,
title = "US Map by HHS Regions"
)The same offset machinery works on any projected sf
geometry. This panel example treats rectangles as diagram or dashboard
cards.
panels <- example_panel_layout()
render_dragged_map(
panels$panels,
region_offsets = panels$region_offsets,
region_col = "group",
labels = panels$labels,
label_offsets = panels$label_offsets,
region_palette = panels$region_colors,
region_labels = panels$region_names,
title = "Draggable non-map panels"
)The key reproducibility test is that offsets can leave the browser as CSV and come back into R without hidden state.
tmp_regions <- tempfile(fileext = ".csv")
tmp_labels <- tempfile(fileext = ".csv")
utils::write.csv(hhs$region_offsets, tmp_regions, row.names = FALSE)
utils::write.csv(hhs$label_offsets, tmp_labels, row.names = FALSE)
render_dragged_map(
hhs$states,
region_offsets = tmp_regions,
region_col = "hhs_region",
labels = hhs$labels,
label_offsets = tmp_labels,
region_palette = hhs$region_colors,
region_labels = hhs$region_names,
title = "CSV round trip"
)This example exercises the newer annotation surface: an info box, a squiggle connector, thicker connector lines, and plot padding for static export.
note <- as_drag_annotations(data.frame(
label_id = "hhs-9-note",
region = "9",
label = "A longer callout can be dragged separately from the region.",
x = hhs$labels$x[hhs$labels$region == "9"],
y = hhs$labels$y[hhs$labels$region == "9"]
), width_px = 210, height_px = 88, connector = TRUE, connector_type = "squiggle")
render_dragged_map(
hhs$states,
region_offsets = hhs$region_offsets,
region_col = "hhs_region",
labels = note,
label_offsets = data.frame(
label_id = "hhs-9-note",
region = "9",
dx_m = 120000,
dy_m = 80000
),
region_palette = hhs$region_colors,
region_labels = hhs$region_names,
connector_linewidth = 1,
connector_linetype = "dashed",
connector_endpoint = "arrow",
legend_title = "HHS region",
map_background = "light_grid",
label_padding = 0.12,
title = "Annotation box and connector"
)Selection filters are render-time controls. They hide selected labels or legend keys without deleting offset rows or changing the source geometry.
render_dragged_map(
hhs$states,
region_offsets = hhs$region_offsets,
region_col = "hhs_region",
labels = hhs$labels,
label_offsets = hhs$label_offsets,
region_palette = hhs$region_colors,
region_labels = hhs$region_names,
label_values = c("1", "2", "3"),
legend_values = c("1", "2", "3"),
title = "Selected labels and legend keys"
)Origin outlines and movement connectors can explain how the layout changed from the original geography. They are optional and off by default.
render_dragged_map(
hhs$states,
region_offsets = hhs$region_offsets,
region_col = "hhs_region",
labels = hhs$labels,
label_offsets = hhs$label_offsets,
region_palette = hhs$region_colors,
region_labels = hhs$region_names,
show_origin_outlines = TRUE,
show_movement_connectors = TRUE,
movement_connector_linetype = "dashed",
movement_connector_endpoint = "closed",
title = "Movement context"
)Several Shiny examples are bundled but not evaluated in this vignette because they launch interactive apps:
if (interactive()) {
shiny::runApp(system.file("examples", "shiny_draggable_plot.R", package = "dragmapr"))
shiny::runApp(system.file("examples", "shiny_custom_labels.R", package = "dragmapr"))
shiny::runApp(system.file("examples", "shiny_draggable_export.R", package = "dragmapr"))
shiny::runApp(system.file("examples", "shiny_spatial_studio.R", package = "dragmapr"))
shiny::runApp(system.file("examples", "shiny_static_export.R", package = "dragmapr"))
}shiny_draggable_export.R demonstrates a common app
pattern: users drag the interactive plot inside Shiny, the helper sends
region and label state back to the parent app, and the app can export a
PNG for a report or document. It also shows toggles for labels, legends,
marker shapes (circle, rounded box, text only), info-box dimensions,
connector style, connector color, connector line pattern, arrow
endpoints, connector thickness, and movement context.
shiny_spatial_studio.R is the general spatial workspace.
It accepts local polygon uploads, including zipped shapefiles, GeoJSON,
and GeoPackage files, then lets users choose grouping/label columns,
colors, annotation style (short labels or info boxes), text size,
connector style, connector line pattern, smart connectors, legend
visibility/title, multiselect legend and label filters, movement
context, map background, and export formats. Region groups are sorted in
natural numeric order throughout the sidebar, the legend, and the
exported CSVs.