Make map diagrams from text
map US Population by State
region-heat Residents (millions) blue
California heat: 39
Texas heat: 30
Florida heat: 23
New York heat: 20
Pennsylvania heat: 13
Illinois heat: 13
Ohio heat: 12
Georgia US heat: 11
North Carolina heat: 11
Michigan heat: 10
New Jersey heat: 9
Virginia heat: 9
Washington heat: 8
Arizona heat: 7
Tennessee heat: 7
Massachusetts heat: 7
Indiana heat: 7
Colorado heat: 6
Maryland heat: 6Overview
Map diagrams put your data on a real geographic map — shaded regions, points of interest, and routes — for anything where where is the organizing dimension: data shaded by region, offices and sites pinned as points, voyages and flows drawn between them. Map diagrams are geographic concept maps: highlight or shade political subdivisions, drop points of interest (POIs), and connect them with routes or edges. They’re for sharing a concept — territories, presence, voyages — not cartography. The map renders at a fixed, auto-fit position (no pan/zoom), and everything is inferred from the content you reference — basemap, viewport, projection, and ramp. A bare map is already the good-looking map: coastlines, mountain relief on reference maps, region and POI labels, and orientation labels all render by default. v1 boundaries are world countries and US states.
When to use
map— the positions correspond to real places on Earth, and losing the geography would lose the point.clock— if the question is only when (“what time is it for them right now?”), a clock answers it directly. A map answers where they are; it grows live time cards as a side channel, not as its subject.heatmap— the rows and columns are named categories and the geography is irrelevant. Conversely, if your rows are states or countries, a grid throws away the adjacency the reader came for — use the map.scatter— the two dimensions are just numbers, not latitude and longitude.arc— the endpoints of your connections are abstract. Use the map when they have real locations.body— you’re labeling parts of a person rather than parts of the Earth.
Syntax
map Title
// names the heat-ramp legend
region-heat Output
// choropleth fill
Florida heat: 42
// categorical fill (via a tag alias)
Texas p: Friendly
// a point of interest
poi Tokyo size: 80
// ordered voyage: origin + arrow legs
route Tokyo
// ~> = arc leg, -> = straight leg
~> Singapore
The first line declares the chart type and an optional title. Type map, name some places, and you’re done — there is no projection, scale, or label directive to set. Cosmetic features are on by default; the only knobs are the bare no-* opt-outs in Turning things off.
How the map is chosen
You never pick a projection — it’s inferred from what you reference. The renderer takes the bounding box of everything (valued or tagged regions, POIs, edge endpoints), pads it, and measures the span:
- US-only →
albers-usa(conic; Alaska/Hawaii appear as insets only when you reference them). - World-scale, with or without data →
equirectangular. - A tight cluster or single continent →
conic-equal-area. - Sub-national US content →
mercator.
A map whose content is entirely US — including one built from US cities alone — renders as the conventional US states map: every state outlined, even with no data. Canada and Mexico still count as North-American, US-oriented content; a place outside that scope switches to a world/regional frame. The basemap, projection, and US scoping are always inferred from what you name — there is no override.
Region fill — heat (choropleth)
A subdivision name on its own line with a heat: fills it from a single-hue tint ramp. The ramp auto-fits data-min→data-max with no zero anchor. Subdivisions with no heat value or tag render as the neutral base.
region-heat Labelnames the ramp in the legend.- A trailing color on
region-heatsets the ramp hue —region-heat Bags (millions) blueshades blue instead of the default red.
Region fill — categorical (tags)
Map diagrams use the universal tag model: declare a tag group and apply its alias as a key. The first declared group colours the map automatically — you only need active-tag to pick a different group (or the heat ramp; see below).
A region can carry both a heat: and a tag (bivariate). Both are kept as selectable colouring dimensions: the legend shows the heat ramp and each tag group. The heat ramp fills by default whenever any region has a heat value; active-tag <GroupName> switches the fill to a tag group instead. The ramp’s selectable group name is Value (not Heat or the displayed region-heat label).
Direct color (highlight one region)
For a quick highlight without declaring a tag group, drop a trailing color on the region line. It paints a flat fill, ignores the active colouring dimension, and adds no legend entry — the “just make this one stand out” escape hatch. Use tags when the colors are a legend-worthy category.
A direct color wins over both the heat ramp and a tag on the same region. (Put it before any metadata: Cuba orange heat: 90.) Using even one direct region colour also disables automatic political colouring across the whole map.
Points of Interest
poi <name | <lat> <lon>> [as <alias>] [<key>: <value>, …]
map European Offices
tag Network as n
Headquarters red
// label defaults to "Paris"
poi Paris
// anchored at Berlin; shows "DACH Region"
poi Berlin label: DACH Region
// positional coords (lat lon), signed
poi 41.9 12.5 as rome
// size: scales the marker area (a data channel)
poi Madrid size: 200
// categorical colour via a tag alias
poi Amsterdam n: Headquarters
// direct marker colour (trailing token)
poi 59.33 18.07 as stockholm teal- Coordinates are positional — two leading signed numbers, latitude then longitude. Cities never start with a number, so there’s no ambiguity.
size:scales the marker area.poi-size Labelis parsed but currently does not produce a legend or other visible output.- A trailing color sets the marker fill directly —
poi Mumbai red— winning over a tag colour and the default orange; no tag group needed. - POI properties:
label,size,clock, an applied tag alias, andas.style:is reserved and peeled from the line, but currently has no rendered effect. There are no POI icons in v1. - Coord-positioned or relabeled POIs take
as <alias>so routes and edges can reference them; named POIs are referenced by name.
Live local-time cards
Flag a POI with clock and it grows a small card above the marker showing the current local time at that place — a live world-clock pinned to the map, for “where is everyone right now” office/team maps. The card reads out the big local time (seconds and am/pm bracketing the hour), a status dot, and the weekday only when it differs from the viewer’s. Cards tick live in the browser; the CLI and PNG export bake a snapshot of the moment they render.