Create a Choropleth Map¶
Goal: Build a beautiful, accurate choropleth map. Avoid the common mistakes (raw counts, rainbow palettes, too many classes).
A choropleth is a thematic map where polygons are colored by a value. It's the most common — and most misused — map type.
The 6 rules of a good choropleth¶
- Normalize the data (don't show raw counts).
- Use a sequential palette (light → dark of one hue).
- Pick a sensible classification (5 classes is usually right).
- Round legend labels to readable numbers.
- Add the projection (some projections distort area badly).
- Tell the story in the title.
Walkthrough — Median Household Income, by US County¶
Step 1 — Get the data¶
- Living Atlas → search "USA Counties Generalized". Add to map.
- Living Atlas → search "USA Median Household Income" or download from the Census ACS. Add the table.
Step 2 — Join, if needed¶
If your income data is a separate CSV:
- Confirm both have a 5-character FIPS field (Text type).
- Right-click counties → Joins and Relates → Add Join.
- Validate. Apply. → Detail: Joins & Relates.
Step 3 — Pick a projection¶
For the contiguous US, use NAD83 / Conus Albers (EPSG:5070). It preserves area, which is exactly what a choropleth needs.
- Right-click the map (Contents) → Properties → Coordinate Systems → Search "Albers" → select.
Step 4 — Rule 1: normalize¶
For income, the value is already a rate ($/household), so no normalization needed. But for most choropleths:
| Raw | Normalized |
|---|---|
| Total population | Population density (per km²) |
| Crime count | Crimes per 1,000 people |
| Number of restaurants | Restaurants per 10,000 people |
If you only have raw counts, add a calculated field. → Attribute Tables.
Step 5 — Symbology¶
- Right-click counties → Symbology.
- Primary symbology = Graduated Colors.
- Field:
MEDIAN_INCOME. - Method: Natural Breaks (Jenks). 5 classes.
- Color scheme: a sequential green palette (e.g., Greens), color-blind safe.
- Outline: 0.25 pt, gray.
- Round upper values in the legend (open each class → set Label):
Step 6 — Layout¶
→ Detail: Professional Map Layout.
Title: "Median Household Income, US Counties, 2022"
Subtitle: "American Community Survey 5-year estimates"
Legend, scale bar, north arrow, source line, projection note.
Step 7 — Export¶
PDF, vector, 300 dpi.
Choropleth mistakes to avoid¶
Don't
- 🚫 Show raw counts. "Total robberies, by state" is meaningless without per-capita normalization.
- 🚫 Use Web Mercator for area-based thematic maps. Areas in Alaska look 3× too big.
- 🚫 Use a rainbow palette (red → green → blue) — it implies non-existent jumps.
- 🚫 Use too many classes (>7). The eye can't distinguish.
- 🚫 Use Equal Interval on skewed data — most polygons end up in one bin.
- 🚫 Forget the source / date.
Do
- ✅ Pick a sequential palette for ordered data, diverging for ±values.
- ✅ Add 5 classes as a default.
- ✅ Label classes with rounded numbers.
- ✅ Note the projection in the corner.
- ✅ Title the question, not the data.
Variant: bivariate choropleth (advanced)¶
Show two variables at once with a 3×3 color grid. E.g., income (3 levels) × education (3 levels) = 9 colors.
ArcGIS Pro doesn't do this out of the box; either:
- Bivariate Colors symbology (in newer Pro versions), or
- Build it manually with a
CONCATENATE(income_class, edu_class)field and a unique-values symbology with a 9-color palette.
Practice¶
Try a normalized choropleth
- Add a counties layer.
- Calculate population density:
POP2020 / SHAPE_AREA_KM2. - Choropleth on density (Quantile, 5 classes, Reds palette).
- Compare to a choropleth on raw
POP2020. Notice the difference.
The density map is honest. The raw count is misleading (large counties always look big).