# Minimap

> A density map for the corner of a dashboard that is also its fastest geo filter: click a state, drag a box, or draw a radius

Canonical: https://ext.tableauops.com/knowledge/kit/minimap
Updated: 2026-10-13
Author: Eric Summers

A small density map for the corner of a dashboard that is also its fastest geo
filter. No geocoding build, no radius parameters, no map sheet with a dozen
actions: drop it on the dashboard and catch rows with a gesture.

| Gesture | What it filters |
|---|---|
| Hover a state | outlines it, tooltip with its rows (or measure total) |
| Click a state | **State** on every other sheet. Shift-click adds states; click again to clear |
| Drag a box | **Key** to the locations inside the box. Shift-drag adds to the net |
| Alt-drag | a radius from the press point, read out live in miles (great-circle), same Key filter |
| Scroll / double-click | zoom about the cursor / reset. Right-drag or Space-drag pans |
| +50 / +100 / +500 | grows the map's zone that much (⤢ = as big as the dashboard allows). To shrink back: double-click the header bar, click the lit ⤡ restore button, or click the lit +N again |
| – | minimizes to the header bar |
| Esc or the chip | clears the map filter |

The **density dropdown** in the header picks what the heat counts: rows, or any
measure on the source sheet. In authoring mode the choice is saved with the
workbook; viewers can switch it for their session.

## Setup

1. Make a small worksheet with **State**, **Latitude**, **Longitude** and a
   **Key** (facility, address, ZIP: whatever one point is) on Detail, plus any
   measures you want to heat by. Put it on the dashboard (it can sit in a
   collapsed container). Minimap reads it and **never filters it**, so the map
   always shows the whole field of play.
2. Add Minimap to the dashboard, ideally **floating** in a bottom corner: the
   boost badges resize a floating zone in place, anchored to the corner it sits
   nearest. A tiled zone can't be resized by an extension, so there the badges
   magnify the map instead (1.5×, 2×, 6×).
3. Fields are auto-detected (latitude/longitude by name, State, the first
   name/id/facility/address/ZIP-like dimension as Key). Override any of them in
   ⚙ settings, and untick sheets Minimap should leave alone.

Fallbacks: no Key field → a box or radius filters a latitude/longitude range
instead. No State field → states are derived from the coordinates, and a state
click filters the Key. No coordinates → each row stands in at its state's
centroid, so a state-only sheet still heats and state clicks still filter.

## Settings

- **Data**: source sheet, latitude, longitude, state, key; sheets to filter.
- **Heat**: density measure, spread (kernel radius), heavy hitters (cap weights
  at p99 / p95 / Q3 + 1.5×IQR so one giant location can't wash out the map; the
  dialog shows how many locations the cap touches).
- **Appearance**: title, light/dark theme, accent.

## How it works

`minimap.js` reads the source sheet's summary data a page at a time (up to
500k rows), projects every point once per pane size with `d3.geoAlbersUsa`, and
bins them into a screen-space grid that a 3-pass box blur turns into a smooth
kernel density, normalized on the 99.5th percentile of lit cells and clipped to
the states. Zooming re-bins at screen resolution, so detail sharpens as you go in;
past 3× (or under ~400 visible points) individual locations appear as dots.
Filters go out with `applyFilterAsync` (Replace) to every dashboard sheet except
the source; sheets that lack the field are skipped.

Geo stack is vendored in `vendor/` (d3 v7, topojson-client, US states atlas).
No data-access permission is requested.

## Get it

Minimap is free on Tableau Desktop. Publishing to Tableau Server or Cloud takes an annual license, from $199/yr; see [pricing](/pricing). See it live in its [demo](/kit/demo/minimap/), on sample data.


---
Try it live: See it live — https://ext.tableauops.com/kit/demo/minimap/
