Skip to content
StoryUse case

Make a choropleth map

A choropleth map shades each area by a value, so a reader sees the pattern across regions at a glance: emissions per country, turnout per district, price per neighbourhood. The craft is in the classification. Spatly lets you shade by quantile, natural breaks, equal interval or an interpolated scale, and shows the class breaks in the legend so the map is honest about how the colour was cut.

Bring polygons as GeoJSON, or join a CSV of values to a boundary layer on a shared key such as an ISO country code. Pick a sequential or diverging ramp, set the number of classes, and tune the breaks while the preview updates. Add a popup that reads the underlying number, and cross-fade between two years to show change. The choropleth below is a real published Spatly story that steps through CO2 per capita across four decades.

Publish the map as a link or an embed, or use it as a chapter in a scroll story where the classes shift as the reader moves.

Live on this page
/embed/gy8vJFaa2w
Scroll to load the live embed
/embed/gy8vJFaa2wlazy

CO2 per capita by country, a choropleth story on Our World in Data figures. This is a real published Spatly surface, not a screenshot.

HowThree steps in Spatly

How to make a choropleth map

  1. Step 1

    Bring polygons or a join

    Upload boundary polygons as GeoJSON, or join a CSV of values to an existing boundary layer on a shared code such as ISO A3.

  2. Step 2

    Classify the value

    Choose quantile, natural breaks, equal interval or interpolated classes and a sequential or diverging ramp. The legend shows the breaks; tune them live.

  3. Step 3

    Publish or animate

    Publish or embed the choropleth, or place it in a story and cross-fade between two years to show change over time.

DataFormats it reads

Bring the data you already have

Spatly ingests it into PostGIS, samples the fields for ramps and categories, and serves GeoJSON or vector tiles depending on size. Every source keeps its refresh policy, cache and health.

GeoJSON polygonsCSV joinFeature services (REST)Vector tiles
EmbedShips as one line

Embed this exact surface

Paste one script tag into any page. The map mounts where the tag sits, resizes to its content, and needs no build step.

one script tag
<script src="https://spatly.io/embed.js" data-spatly="gy8vJFaa2w" data-height="640"></script>

Posts spatly:ready, spatly:resize, spatly:expand and spatly:select. Embed docs

FAQQuestions

Good to know

How do I classify the values?
Spatly supports quantile, natural breaks, equal interval and interpolated classes, with the class breaks shown in the legend so the colour cut is visible.
Can I join a spreadsheet to boundaries?
Yes. Join a CSV of values to a boundary layer on a shared key, such as an ISO country code, and shade the polygons by any joined column.

Make a choropleth map in Spatly.

Start from a basemap and a file, or open a template and take it apart. Every plan includes Spatly embeds, the REST API and the MCP server.

41.0082°N 28.9784°E · z 11.3 · ⟂ 0°