← All work
Energy & Economics · Interactive data visualization · Independent project

Migration Space

County-to-county migration as a solar system

Miami-Dade votes R+11 overall: the places sending it people lean D+16, the places it sends people to lean R+8.

Open the project →

Data
IRS county-to-county migration, Census cartographic boundaries, published county election returns
Coverage
3,144 counties, 53,614 disclosed migration flows, tax years 2022 to 2023
Method
True compass bearing and great-circle distance for layout; partner political lean weighted by movers, not by county
Implementation
Plain ES modules, one canvas, zero runtime dependencies · baked data, no backend
Screenshot of Migration Space
Migration Space · screenshot
3,144
U.S. counties, each its own solar system
53,614
disclosed migration flows between them
17.8%
of counties where people and income moved in opposite directions

Question

Migration data is usually shown as a bar chart of net gainers and losers. I wanted to see the actual shape of it for one place at a time: who a county trades people with, how far away they are, and what kind of places they are.

Function

Pick any of 3,144 counties and it becomes the center of its own solar system: every county it exchanges people with orbits it, positioned by true compass bearing and real distance, sized by how many people moved, colored by whether that place gained or lost. Beside it, one sentence says what happened, and two bars show how the places it drew people from voted in 2024 against the places it sent them to. One switch recolors the map and the compass by people, income or the 2024 vote, and a national chart puts every county on its 2024 margin against how much it grew or shrank from moving.

Limitation

The IRS only publishes flows above a disclosure threshold, so the drawn lines are usually 70 to 90 percent of a county's real movement, with the rest counted in the totals but not shown individually. The political reading describes the places people moved to and from, never how those people themselves voted, since the migration data and the election returns come from two files that were never joined at the individual level.