Module 16: Thematic Mapping & Visualization

16.1 Choropleth Maps

The most common thematic map — colour intensity per polygon — and how to make one that doesn't mislead.

Lesson 77 of 100·15 min read

Key takeaways

  • Choropleths shade polygons by a quantitative attribute.
  • Always normalise by area or population — absolute counts mislead.
  • Classification and colour choices determine whether the map informs or distorts.

Introduction

The choropleth — from Greek choro (area) + pleth (many) — is the single most-produced thematic map. States by population, counties by income, districts by vote share: all choropleths. Done well, they communicate spatial patterns instantly. Done poorly, they routinely mislead. This lesson covers both sides.

The basics

A choropleth:

  • One polygon layer.
  • One numeric attribute per polygon.
  • Polygons shaded by a colour ramp keyed to the attribute.
Python
1import geopandas as gpd
2gdf = gpd.read_file('districts.gpkg')
3ax = gdf.plot(column='income_per_capita', cmap='viridis', legend=True)

Normalise

Raw counts mislead. "California has the most cars" is true but boring — California is huge. "Cars per capita" or "cars per km²" is the meaningful variable.

Common normalisations:

  • Per capita (per person): for most socioeconomic measures.
  • Per area (density): for phenomena distributed in space (population density, species counts).
  • Per household / per voter: domain-specific.
  • Rate or percentage: COVID cases per 100 000.

The one absolute-count choropleth that makes sense is when the polygon sizes are approximately equal (e.g., hex grids).

Classification methods

Converting a continuous variable to discrete colour bands. Common methods:

MethodBehaviour
Equal intervalSame data range per class. Hides distribution skew.
QuantileEqual polygon count per class. Evens the map but groups different values.
Natural breaks (Jenks)Minimises within-class variance. Adaptive, common default.
Standard deviationClasses relative to the mean; emphasises outliers.
ManualBreaks chosen for domain meaning.
Continuous (unclassed)Every polygon gets its exact colour — no bins.

The same data, classified different ways, produces dramatically different maps. Always say which method you used.

Number of classes

3–7 is the sweet spot. Fewer than 3 carries little information; more than 7 blurs boundaries. The classic Brewer recommendation: 5 classes as a default.

Colour ramp

Match ramp type to data:

  • Sequential (single hue) for ordered data: income, density.
  • Diverging for centred data: change from average, gains vs losses.
  • Qualitative for categorical data: political parties, land-use classes.

Module 5.3 covers palettes; ColorBrewer and viridis are the defaults.

Bivariate choropleths

Visualise two variables at once with a 3×3 colour grid:

  • Red high, Blue high, Red&Blue high, etc.
  • Each polygon gets a colour based on its combination of the two variables.

Beautiful when done right; baffling when done badly. Use for stories with a clear two-variable narrative.

Dasymetric mapping

Choropleths assume uniform distribution within each polygon — a county's density is constant. In reality it isn't: population clusters in cities within the county. Dasymetric maps refine by combining the polygon data with a secondary layer (land-use, satellite imagery) to redistribute values.

Example: redistribute census tract population across the tract based on a 100 m population raster, producing a more realistic density surface.

Common mistakes

  • Raw counts: "Number of crimes" by state — California wins, but per capita Wyoming leads.
  • Wrong ramp: rainbow for ordered data.
  • Too many classes: 12 shades of blue that humans can't distinguish.
  • Ignoring MAUP: same data at different aggregation levels tells different stories.
  • No legend: colours mean nothing without values.

A good choropleth checklist

  • Variable is normalised (per capita, per km², rate).
  • Classification method disclosed.
  • Colour ramp matches data type.
  • 3–7 classes.
  • Legend shows both colours and values with units.
  • Title specifies subject, place, time.
  • Source and date credited.
  • Projection preserves area for comparative reading.

Self-check exercises

1. Why is "number of patents filed per state" a bad choropleth?

States have vastly different populations and economies. A raw-count choropleth makes California and Texas dominant simply because they're big. Normalise — "patents per 1 000 residents" or "patents per billion GDP" — to expose the real pattern. Absolute counts are better shown as proportional symbols (dots sized by count) than choropleths.

2. Quantile vs natural breaks for a right-skewed variable. Which?

Either is defensible; Jenks (natural breaks) is more common because it adapts to the distribution's actual clustering. Quantile evens the map (equal polygon count per class) but can group very different values into the same class, losing information. Try both, look at the histograms with class breaks overlaid, and pick the one that best reflects the data's story.

3. You're making a map of "change in unemployment rate". Which colour ramp type?

Diverging — the meaningful midpoint is zero (no change). Positive changes (unemployment rose) and negative changes (fell) deserve visually distinct colours meeting at white/grey at zero. Using a sequential ramp would make "change = 0" visually the same as "change = 2 %", missing the important sign information.

Summary

  • Choropleths shade polygons by a quantitative attribute.
  • Normalise always; pick classification method and colour ramp deliberately.
  • Bivariate and dasymetric variants extend the form.
  • A good choropleth is honest — a bad one is common.

Further reading

  • Brewer, C. — Designing Better Maps.
  • Dent, B. D. — Cartography: Thematic Map Design.
  • Monmonier, M. — How to Lie with Maps.
  • ColorBrewer 2.0 — palette selection.