← New York Citychartlink · choropleth
New York City by: ZIP codes · boroughs
Map of New York City by ZIP code, one number per ZIP code
Also: New York City map by ZIP code · NYC ZIP code map · Manhattan ZIP codes map · New York neighborhoods by ZIP · colour every NYC ZIP code by a value

Example: Average income per tax return by ZIP code in New York City, 2021 — Adjusted gross income per federal return filed for tax year 2021, by ZIP code. The Upper East Side, Tribeca and the West Village file the highest averages; the Bronx and eastern Brooklyn the lowest. Grey ZIP codes have too few returns for the IRS to publish. Borough lines are drawn on top.
About this template
Data: one row per ZIP code with its code (10001 for Chelsea, 11201 for Brooklyn Heights) or its name, and a number. A ZIP code with no row stays grey. The 223 ZIP Code Tabulation Areas of the five boroughs, 5 digits each; ZIP codes with no residents (parks, airports) are not drawn. Same design as the other city maps, so they sit together.
A choropleth map of the regions of the "nyc-zips" geography, each region filled by one number from your data (the "income" column).
A sequential colour scale from pale blue for the smallest values to deep navy blue for the largest; pinned to 40000 to 250000, 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.3-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 — zip (string, "ZIP code (code or name)"), income (number, "Average AGI per return ($)") — and 191 rows in the example "Average income per tax return by ZIP code in New York City, 2021". Regions are named by ISO 3166-2 region codes or region names; 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_NNQQqalU4mzNLENmnz9ly; buckets (with the values in classes and a swatch legend): ast_IjjtFfqSckp0qFgrL9whD; editorial (in the editorial house style — serif type on paper, a green ramp): ast_iFvtouzi4pIwneVuMkrpQ; categories (with a text category per region and a swatch legend): ast_RiFSezYWs4KN0i5e8K1nJ; buckets-dark (with the values in classes and a swatch legend, on a dark canvas): ast_Zc0b8YhCWg0MIDoWLO9st; surroundings (with the land around the place drawn in grey): ast_azewoBBCBFxZd4bgae7d1; categories-dark (with a text category per region and a swatch legend, on a dark canvas): ast_W9HdQHNwfUl3id1Mvoxof; buckets-editorial (with the values in classes and a swatch legend, in the editorial house style — serif type on paper, a green ramp): ast_uWv4nbzPeKCpHRBiQ3KUz; dark-surroundings (on a dark canvas, with the land around the place drawn in grey): ast_HcT1e3tI44S2uZivPPei4; buckets-surroundings (with the values in classes and a swatch legend, with the land around the place drawn in grey): ast_onxrvYUDYwIvm8aZAvwji; 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_WnWfb1M4KDTUN47X5Oy3y; editorial-surroundings (in the editorial house style — serif type on paper, a green ramp, with the land around the place drawn in grey): ast_0UqjE00u3WLedUEJ5WUKY; categories-surroundings (with a text category per region and a swatch legend, with the land around the place drawn in grey): ast_oFYEW3yAbGtMcJRok5eyw; 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_FyYxrA9rAmQ25KvE0P2uU; 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_7Lt5QGSdjQCK3WHeh5DwI; 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_LQMLF3Y66ffm3dHQxdySL; 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_64nHKu8ggdSLALMEcy5Cn. 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 |
|---|---|---|
| zip | string | ZIP code (code or name) |
| income | number | Average AGI per return ($) |
191 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_DW5cjySzMGaz2exfbG9bU",
"knobs": {
"theme": "light",
"dataType": "gradient",
"title": {
"text": "Your title"
},
"source": {
"text": "Where the numbers come from"
}
},
"data": {
"columns": [
{
"id": "zip",
"type": "string"
},
{
"id": "income",
"type": "number"
}
],
"rows": [
[
"…"
]
]
},
"publish": true
}The recipe (the template's settings)
{
"chart": {
"domain": [
40000,
250000
],
"format": {
"kind": "currency",
"compact": true,
"currency": "USD",
"decimals": 0
},
"outline": {
"width": 0.3
},
"geography": "nyc-zips"
},
"title": {
"text": "Average income per tax return by ZIP code in New York City, 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 by ZIP code, tax year 2021"
},
"encoding": {
"value": {
"column": "income"
},
"region": {
"column": "zip"
}
},
"description": {
"text": "Adjusted gross income per federal return filed for tax year 2021, by ZIP code. The Upper East Side, Tribeca and the West Village file the highest averages; the Bronx and eastern Brooklyn the lowest. Grey ZIP codes have too few returns for the IRS to publish. Borough lines are drawn on top."
}
}map · choropleth · new-york-city · zip-codes · city · city-districts
Similar templates
- Map of New York City by borough, one number per borough
- Map of London by ward, one number per ward
- Map of Berlin by planning area, one number per planning area
- Map of Paris by IRIS block, one number per IRIS block
- Map of Madrid by barrio, one number per barrio
- Map of Madrid by district, one number per district
- Map of Tokyo by ward, one number per ward
- Map of Berlin by district, one number per district
- All templates →