# Map of Rhode Island by ZIP code, one number per ZIP code

A chartlink template (choropleth). Page: https://chartlink.app/maps/us/rhode-island/zip-codes · Example image: https://chartlink.app/a/ast_cb1ZhLX7M6UnkZLetuFcR.png?v=6&w=1200 · Template id: `ast_cb1ZhLX7M6UnkZLetuFcR`

Also answers: Rhode Island ZIP code map · RI ZIP codes map · colour every ZIP code in Rhode Island by a value · Rhode Island ZIP-level choropleth · map of Rhode Island ZIP codes

## About

Data: one row per 5-digit ZIP code in Rhode Island (as text — keep leading zeros) and a number. A ZIP code with no row stays grey; ZIP codes with no residents (large parks, water) are not drawn. The map is fitted to Rhode Island alone. Same design as the state's county map and the other 49 ZIP maps.

A choropleth map of the 5-digit ZIP codes of Rhode Island (Census ZIP Code Tabulation Areas), each region filled by one number from your data (the "income" column). The borders of the "us-states-outline" regions are drawn on top of the regions in dark navy blue, 1 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 — zip (string, "ZIP code (5 digits)"), income (number, "Average AGI per return ($)") — and 69 rows in the example "Average income per tax return by ZIP code in Rhode Island, 2021". Regions are named by 5-digit ZIP codes; 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_XaNVN631i6Vfr4V5aRDJR; buckets (with the values in classes and a swatch legend): ast_9eTKyhyez0mAK4XE4HhYF; editorial (in the editorial house style — serif type on paper, a green ramp): ast_3Fa36NPz3yoXJxOIczfL4; categories (with a text category per region and a swatch legend): ast_nWFxmCRLPameVRm2FETbZ; buckets-dark (with the values in classes and a swatch legend, on a dark canvas): ast_P1S25N4sJzEMrVWwftYjl; surroundings (with the land around the place drawn in grey): ast_nPq0xgpGrTqRpM1pt4CIt; categories-dark (with a text category per region and a swatch legend, on a dark canvas): ast_1UoyaHsnKnmpUzXYjJGGB; buckets-editorial (with the values in classes and a swatch legend, in the editorial house style — serif type on paper, a green ramp): ast_XUX4zX2UskspZqHZTcRgy; dark-surroundings (on a dark canvas, with the land around the place drawn in grey): ast_yTL5EA7byAz0zXNoIlxbg; buckets-surroundings (with the values in classes and a swatch legend, with the land around the place drawn in grey): ast_1J3KdMo1AF55trdNoEhgh; 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_VYOINlzfOwJvpif5935N5; editorial-surroundings (in the editorial house style — serif type on paper, a green ramp, with the land around the place drawn in grey): ast_FNaQy53NlXzvm30o4MBgC; categories-surroundings (with a text category per region and a swatch legend, with the land around the place drawn in grey): ast_7G55XHZXsT582ERJ7ImLX; 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_OYcydMRnqgwsR76Uiiik0; 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_o3TMnDAwu4tC1NrtbXtBt; 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_Ls95mtD6gvWxMhAx3TH1i; 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_jU4T4yUCwhXMqaemQdTkp. On the page, switch with the toggles; an agent passes that id as the template instead.

## Looks

Available: gradient light, gradient dark, buckets light, gradient editorial, categories light, buckets dark, gradient light with surroundings, categories dark, buckets editorial, gradient dark with surroundings, buckets light with surroundings, categories editorial, gradient editorial with surroundings, categories light with surroundings, buckets dark with surroundings, categories dark with surroundings, buckets editorial with surroundings, categories editorial with surroundings. Pick one with the `theme`, `dataType` and `surroundings` knobs.

## Knobs (the template's settings)

- `theme`: "light" | "dark" | "editorial" (default "light") — light or dark: the whole colour bundle — canvas, text, outlines, key (editorial: the house style, where a template offers it — the contract's looks say)
- `dataType`: "gradient" | "buckets" | "categories" (default "gradient") — How the value column is encoded. "gradient": a number per region on a continuous scale. "buckets": numbers sorted into classes with a swatch key. "categories": a TEXT label per region, one colour each
- `surroundings`: boolean (default false) — true draws the land around the place in quiet grey — the neighbouring states or countries — and the water in blue, so the reader sees where it sits. The frame stays the same. With it, waterColor and landColor apply.
- `missing`: "hatch" | "plain" — How a region with no row is drawn: "hatch" (thin diagonal lines, the templates' default) or "plain" (a flat grey)
- `waterColor`: string — With surroundings: the colour of the water (the map area's ground). An error without surroundings: true
- `landColor`: string — With surroundings: the fill of the neighbouring land. An error without surroundings: true
- `backgroundColor`: string — Overrides the canvas colour after the theme; text and outline colours stay the theme's
- `border`: object — A frame around the whole graphic
- `title`: object
- `description`: object
- `source`: object — The source line at the bottom left
- `brand`: object — The byline at the bottom right — premium charts only; the free tier reads "Made with chartlink.app"
- `colormap`: "blues" | "greens" | "purples" | "oranges" | "reds" | "greys" | "yellow-green-blue" | "yellow-orange-red" | "viridis" | "magma" | "cividis" | "blue-red" | "red-blue" | "brown-teal" | "purple-green" | "orange-purple" — gradient and buckets: the colour ramp. One hue: blues (default), greens, purples, oranges, reds, greys. Several hues: yellow-green-blue, yellow-orange-red, viridis, magma, cividis. Diverging around zero, for signed data: blue-red, red-blue, brown-teal, purple-green, orange-purple. Details: blues (the default: one blue, light to dark); greens (one green, light to dark); purples (one purple, light to dark); oranges (one orange, light to dark); reds (one red, light to dark); greys (one grey, light to dark — for a muted map); yellow-green-blue (pale yellow through green to deep blue (ColorBrewer YlGnBu)); yellow-orange-red (pale yellow through orange to deep red (ColorBrewer YlOrRd) — heat); viridis (dark purple through teal to yellow — perceptually even, colour-blind safe); magma (black through magenta to pale yellow — perceptually even); cividis (blue to yellow — even and safe for every kind of colour blindness); blue-red (blue below zero, red above (the default diverging)); red-blue (red below zero, blue above); brown-teal (brown below, teal above (ColorBrewer BrBG) — dry against wet, loss against gain); purple-green (purple below, green above (ColorBrewer PRGn)); orange-purple (orange below, purple above (ColorBrewer PuOr))
- `direction`: "normal" | "reversed" — gradient and buckets: "reversed" runs the colormap the other way — dark for low values, or the arms of a diverging ramp swapped — when a high number is the bad one
- `range`: array — gradient (and equal-width buckets): pin the scale to [min, max]; values beyond clamp and the key says ≤ / ≥ — an outlier no longer pushes every other region to one end. Omit to fit the data
- `breaks`: array — buckets: the ascending cut points between classes; sets the class count
- `classes`: integer — buckets: how many quantile classes when breaks are not given (default 5)
- `categoryColors`: object — categories: a colour per label, e.g. {"Republican": "#dc2626"}
- `categoryOrder`: array — categories: the key's order; labels not listed follow in order of appearance

## Data

| column | role | type | about |
|---|---|---|---|
| `zip` | region | string | The region, as a code the geography knows (see region) |
| `income` | value | number | The value per region: a number for gradient and buckets, a text label for categories |

## Region codes

Geography `us-zips-ri`: 5-digit ZIP codes. The region's exact name or a listed alias also works; unknown codes fail with the closest matches.. A region with no row stays grey.
Examples: `02802` (02802), `02864` (02864), `02921` (02921).
Every region with its aliases: https://chartlink.app/api/geographies/us-zips-ri

## What each dataType expects

- **gradient**: value column number; knobs `colormap`, `direction`, `range`. A continuous colour scale fitted to your numbers; colormap names the ramp (blues by default; a diverging one pins its middle to zero), direction reverses it, range pins the ends so an outlier cannot stretch the scale.
- **buckets**: value column number; knobs `colormap`, `direction`, `breaks`, `classes`, `range`. Numbers sorted into classes with a swatch key: give breaks, or a class count (quantiles by default; with range, equal-width); colormap and direction as for gradient.
- **categories**: value column string; knobs `categoryColors`, `categoryOrder`. A label per region, one colour each, keyed in the order the labels first appear (or categoryOrder).

## With surroundings

With surroundings: true the water and the neighbouring land are drawn; these two knobs recolour them. Without it they are an error. Knobs: `waterColor`, `landColor`.

## Make one

Copy this shape, replace the rows with yours, and POST it (no account needed: `POST /api/signup` returns a key, shown once).

```
POST https://chartlink.app/api/assets
Authorization: Bearer <apiKey>
{
  "template": "ast_cb1ZhLX7M6UnkZLetuFcR",
  "knobs": {
    "theme": "light",
    "dataType": "gradient",
    "title": {
      "text": "Your title"
    },
    "description": {
      "text": "One sentence on what the map shows."
    },
    "source": {
      "text": "Where the numbers come from"
    }
  },
  "data": {
    "columns": [
      {
        "id": "zip",
        "type": "string"
      },
      {
        "id": "income",
        "type": "number"
      }
    ],
    "rows": [
      [
        "02804",
        73311
      ],
      [
        "02806",
        224405
      ],
      [
        "02808",
        63895
      ]
    ]
  },
  "publish": true
}
```

Dry run first if unsure of the codes: `POST https://chartlink.app/api/templates/map-us-rhode-island-zip-codes/check` with {data, knobs} reports unmatched values with the closest real codes and creates nothing.

The create does this check itself: a region value that matches nothing comes back as a 400 listing it with the closest real codes, before anything is made. The template can be named by its id, its slug, or its page address (us/rhode-island/zip-codes).

Over MCP (`https://chartlink.app/mcp`): `list_templates` → `get_template` → `create_from_template` (`check_template_data` when you want the report without creating).

- POST https://chartlink.app/api/assets with the example's shape: template, knobs, your data (publish: true when it is final). Over MCP: create_from_template.
- A 201 means it validated and rendered; the response carries urls.embedIframe, urls.png and urls.page, and a preview to look at.
- Anything beyond the knobs is the advanced path: a config object, deep-merged after the knobs — the manual at /llms-full.txt.

## Similar templates

- Map of Wyoming by ZIP code, one number per ZIP code: https://chartlink.app/templates/map-us-wyoming-zip-codes.md
- Map of Wisconsin by ZIP code, one number per ZIP code: https://chartlink.app/templates/map-us-wisconsin-zip-codes.md
- Map of West Virginia by ZIP code, one number per ZIP code: https://chartlink.app/templates/map-us-west-virginia-zip-codes.md
- Map of Washington by ZIP code, one number per ZIP code: https://chartlink.app/templates/map-us-washington-zip-codes.md
- Map of Virginia by ZIP code, one number per ZIP code: https://chartlink.app/templates/map-us-virginia-zip-codes.md
- Map of Vermont by ZIP code, one number per ZIP code: https://chartlink.app/templates/map-us-vermont-zip-codes.md
- Map of Utah by ZIP code, one number per ZIP code: https://chartlink.app/templates/map-us-utah-zip-codes.md
- Map of Texas by ZIP code, one number per ZIP code: https://chartlink.app/templates/map-us-texas-zip-codes.md

All templates: https://chartlink.app/llms.txt · The engine behind them: https://chartlink.app/llms-full.txt