← The United Stateschartlink · choropleth
The United States by: 3-digit ZIP code areas · counties · congressional districts · metro areas · states
Map of the United States by 3-digit ZIP code area, one number per area, with the state borders
Also: US ZIP code map · map by ZIP prefix · colour ZIP code areas by a value · nationwide ZIP choropleth · ZIP-level data map of America

Example: Average income per tax return by ZIP code area, 2021 — Adjusted gross income per federal return filed for tax year 2021, by 3-digit ZIP code area. Manhattan, the Bay Area and the Connecticut suburbs stand apart. White gaps inside the map are land with no ZIP code at all; grey areas have too few returns for the IRS to publish, and Puerto Rico files separately.
About this template
Data: one row per 3-digit ZIP prefix (902 for Los Angeles — keep leading zeros, so 010 not 10) and a number. 5-digit ZIP codes must be grouped to their first three digits first. An area with no row stays grey; white gaps inside the map are land with no ZIP code at all (parks, military land, desert). State borders are drawn on top. Same design as the state and county maps, so the three can sit side by side.
A choropleth map of the 3-digit ZIP code areas of the United States (894 areas, with Alaska, Hawaii and Puerto Rico as insets), each region filled by one number from your data (the "income" column). The borders of the US states and Puerto Rico are drawn on top of the regions in dark navy blue, 0.5 units wide, so the finer regions read inside their larger units.
A sequential colour scale from pale blue for the smallest values to deep navy blue for the largest; pinned to 40000 to 150000, so values beyond the ends take the end colour and the colour bar says ≤ and ≥; a gradient colour bar below the map, with its labels underneath; values formatted as USD amounts, in compact form (1.2k, 3.4M), 0 decimals; on a white canvas (#ffffff) with near-black text — a light theme; 0.25-unit hairline outlines between regions.
The title and description are left-aligned above the chart. Font: Inter (the default); a source line with a link sits at the bottom, with the chartlink badge in the corner.
Data: 2 columns — zip3 (string, "ZIP prefix (3 digits)"), income (number, "Average AGI per return ($)") — and 885 rows in the example "Average income per tax return by ZIP code area, 2021". Regions are named by 3-digit ZIP prefixes; a region with no row stays unfilled in grey, and an unknown code fails loudly with the nearest matches. Your data keeps the same column ids and every other setting comes from the template; an agent can change any of them.
Other looks of this template — dark (on a dark canvas): ast_RKYYARDuhlCOgVXMQfOY5; buckets (with the values in classes and a swatch legend): ast_cmOusTs2UUwFtRicLBEZ8; editorial (in the editorial house style — serif type on paper, a green ramp): ast_R66eT2CnHqEhneYI14KnD; categories (with a text category per region and a swatch legend): ast_tP4BaVIpYAKUwllIOBPrE; buckets-dark (with the values in classes and a swatch legend, on a dark canvas): ast_Pi94QyowwscyYLq4KoXrg; surroundings (with the land around the place drawn in grey): ast_raf98DNuLhq0IbzZSjOTo; categories-dark (with a text category per region and a swatch legend, on a dark canvas): ast_IXkcayIce7TYivC9Bn3bm; buckets-editorial (with the values in classes and a swatch legend, in the editorial house style — serif type on paper, a green ramp): ast_1CqAlkmvPswfgGh4kNKEX; dark-surroundings (on a dark canvas, with the land around the place drawn in grey): ast_NRauNeskb3KfCNZLCapwu; buckets-surroundings (with the values in classes and a swatch legend, with the land around the place drawn in grey): ast_Ut2TKbOrCdGP6ew13vfV0; categories-editorial (with a text category per region and a swatch legend, in the editorial house style — serif type on paper, a green ramp): ast_dyDmWvYyeFT5EDJdaxisl; editorial-surroundings (in the editorial house style — serif type on paper, a green ramp, with the land around the place drawn in grey): ast_RhnHae4ES5YdnZRQ1xR84; categories-surroundings (with a text category per region and a swatch legend, with the land around the place drawn in grey): ast_IftHCFZ6y2K1xKFXJlpXj; buckets-dark-surroundings (with the values in classes and a swatch legend, on a dark canvas, with the land around the place drawn in grey): ast_zIHCtcaLQPZhMSUTBJH51; categories-dark-surroundings (with a text category per region and a swatch legend, on a dark canvas, with the land around the place drawn in grey): ast_iNmKxJvWc9R3yU7DGXxTO; buckets-editorial-surroundings (with the values in classes and a swatch legend, in the editorial house style — serif type on paper, a green ramp, with the land around the place drawn in grey): ast_ihhjcN2AhvSx5FeOVegDy; categories-editorial-surroundings (with a text category per region and a swatch legend, in the editorial house style — serif type on paper, a green ramp, with the land around the place drawn in grey): ast_1ujWFvIrm5YzsgPTDZjn4. On the page, switch with the toggles; an agent passes that id as the template instead.
Use it with your agent
Copy the prompt, paste it into Claude, ChatGPT, Cursor or any agent with the chartlink MCP server or API, and give it your numbers. It rebuilds this exact design with your data and hands back an embed, a PNG and a page.
The prompt in full
Data this template expects
| column id | type | in the example |
|---|---|---|
| zip3 | string | ZIP prefix (3 digits) |
| income | number | Average AGI per return ($) |
885 rows in the example. Your data keeps these column ids; everything else about the chart comes from the template.
For agents: the API call
POST https://chartlink.app/api/assets
{
"template": "ast_NHq9NO5IqJlAhHMKV7iHO",
"knobs": {
"theme": "light",
"dataType": "gradient",
"title": {
"text": "Your title"
},
"source": {
"text": "Where the numbers come from"
}
},
"data": {
"columns": [
{
"id": "zip3",
"type": "string"
},
{
"id": "income",
"type": "number"
}
],
"rows": [
[
"…"
]
]
},
"publish": true
}The recipe (the template's settings)
{
"chart": {
"domain": [
40000,
150000
],
"format": {
"kind": "currency",
"compact": true,
"currency": "USD",
"decimals": 0
},
"borders": {
"color": "#1f2937",
"width": 0.5,
"geography": "us-states-pr"
},
"outline": {
"width": 0.25
},
"geography": "us-zip3"
},
"title": {
"text": "Average income per tax return by ZIP code area, 2021"
},
"preset": "map-light",
"source": {
"url": "https://www.irs.gov/statistics/soi-tax-stats-individual-income-tax-statistics-zip-code-data-soi",
"text": "IRS Statistics of Income, individual income tax statistics, tax year 2021"
},
"encoding": {
"value": {
"column": "income"
},
"region": {
"column": "zip3"
}
},
"description": {
"text": "Adjusted gross income per federal return filed for tax year 2021, by 3-digit ZIP code area. Manhattan, the Bay Area and the Connecticut suburbs stand apart. White gaps inside the map are land with no ZIP code at all; grey areas have too few returns for the IRS to publish, and Puerto Rico files separately."
}
}map · choropleth · united-states · zip-codes · zip3 · state-borders · us-set
Similar templates
- Map of the United States by congressional district, one number per district, with the state borders
- Map of the United States by county, one number per county, with the state borders
- Map of the United States by metropolitan area, one number per metro, with the state borders
- Map of the United States by state, one number per state
- Map of Wyoming by ZIP code, one number per ZIP code
- Map of Wisconsin by ZIP code, one number per ZIP code
- Map of West Virginia by ZIP code, one number per ZIP code
- Map of Washington by ZIP code, one number per ZIP code
- All templates →