NoteDemographic group leans are estimated by ecological inference from area-wide election returns — it can’t perfectly separate voters who live side by side, so a group’s shown lean is an approximation. Spot something off? Report it.
What’s newv3.3
Shuffler changelog
- The Election Shuffler is now archived: it stays online, free and public to use, but the model and data are no longer being updated. Thanks to everyone who explored their own electorates with it.
- Demographic group leans are now built from real precinct returns. For every state and recent election (2016–2024), the Shuffler reads how each racial group actually voted in each county straight from that county's precincts — so California's Central Valley Hispanics read Democratic, Miami's Cubans and South Texas read Republican, and rural white farm counties read very Republican, all recovered from the votes themselves instead of a national assumption. A county with no precinct-level signal for a group falls back to its state, then national, survey estimate.
- The national level of each group's vote stays anchored to the survey record; the precinct data only supplies the geography (how each county differs). Every county still reproduces its actual result, and the readout and the shuffle agree exactly.
- Added a note that demographic group leans are estimated by ecological inference — inferred from precinct and area-wide returns, so a group's shown lean is an approximation.
- Sharper racial polarization in the model: White and Black voting propensities are now estimated per state (via ecological regression on each year's returns), so Southern counties are far more starkly polarized — closer to reality — while every county still reproduces its actual result.
- New Border thickness and opacity sliders in Customize → Borders let you scale or fade every map border (county, state, precinct, district) to taste.
- Fixed the "CD map" district-vintage menu getting cut off at the bottom of the map — a long list now scrolls within the menu, and the Congress labels were shortened (e.g. "119th (2025–27)") so each row and the button itself are more compact.
- Multi-party scenarios are now fully consistent: when several third-party candidates carry states, the map, the tooltip, the flip list and the Electoral College all agree on who won each state, and the top-bar EC strip shows one segment per candidate in that candidate's own color (no more single lumped block).
- Tooltips now name a leading third-party candidate ("Stein +15.1") instead of always showing a Dem-vs-Rep margin — no more "D+100" on a county the Democrat lost.
- An exact tie (or a unit shuffled to zero votes) no longer silently awards its electors to one party: ties award nobody, zero-vote counties and states paint as no-data gray, and the flip list labels them "Tie" / "no votes".
- Combining states now really merges their electoral votes: a state whose counties have all moved away drops to zero EVs (its House seats flow to the absorbing state), instead of keeping two phantom senators.
- District view fixes: group turnout dials now work in the Districts view (they were silently ignored), and switching County ↔ District no longer changes the result in years without district demographic tables (2008).
- The swing map paints a truly neutral gray at zero swing instead of a faint red tint.
- Switching the interface to Classic now opens the Customize panel right where the way back (Interface → Modern) lives — no more feeling trapped in Classic.
- North Carolina's 2020 congressional districts now use the court-ordered 2019 remedial map the election was actually held under (Raleigh united in NC-02, Greensboro in NC-06) — district results, demographics and the map itself were all rebuilt on the correct lines.
- The National Shuffler's demographic sliders are now true dials: a value you set stays exactly where you put it no matter what you adjust afterwards or in what order (education-then-race used to give a different map than race-then-education), and third-party group sliders no longer wobble mid-drag.
- The modern interface is redesigned from scratch as a mapping workstation: a slim top strip (base election + live Electoral College instrument with a "State flips" popover), the map as a full-bleed stage with its controls docked in a console bar above it (nothing overlaps the map), a tabbed side dock (National · Local · Style) that highlights the Local tab when you make a selection, and a live status bar (view · selection · edits). Classic is unchanged under Style → Interface.
- Fixed: dragging national turnout to 0% now really drops every demographic group to zero turnout (and leaving the extreme snaps back with no drift) — the same treatment the Dem 2P slider already had.
- A fully redesigned modern interface is now the default — the Election Night Simulator's broadcast console applied structurally: the Electoral College deck becomes the masthead (oversized candidate tallies, gold "270 TO WIN"), the map controls merge into one attached console bar, the National Shuffler reads as a rack of modules, every toolbar control shares one standardized 34px chrome, the Local Shuffler is a dossier (hero result line, one-row selection shelf, actions in the header, hairline-partitioned columns), and state flips tuck behind a collapsible "State flips · N" disclosure. Prefer the old look? Customize → Interface → Classic (remembered per browser).
- Selection tools redesigned and integrated into the map console bar: crisp icons with V / B / P / E keyboard shortcuts, a context chip showing what a click selects in the current view, and a live selection count with one-tap clear.
- The Local Shuffler's precinct tier is now the full card: live "Now:" result line, an absolute Dem 2P Vote slider, the demographic shuffle, parent-county election history back to 1928, and vote-weighted census composition bars (race / education / age / income).
- State flips collapse behind a "State flips · N" disclosure on phones, so the scoreboard stays compact.
- Demographic slider baselines recalibrated to the historical survey record: religion and income (all years — Catholics no longer read as 75% Dem), race/age (1992–2020) and sex/education (1972–2020) from the published exit-poll / Gallup / validated-voter tables. Catalist validated-voter data anchors race, education, age and sex for 2024.
- One "Local Shuffler" card beneath the map replaces the separate County and State Shuffler cards — it follows the map view (Counties / States / Districts / Precincts), keeps each tier's selection when you switch, and offers a one-click jump back to a tier with a live selection. The district margin-swing control moved off the map and into the card.
- NEW: precinct selector — in the Precincts view, click (or box/brush) block groups to select them, then swing them together; the swing recolors those precincts and rolls up vote-conservingly to their counties, the map and the Electoral College.
- Precinct demographic shuffle: pick a group (race / age / education / income) and shift its Dem share — each selected precinct moves by its OWN census composition, so a +10 shift moves a 60%-group precinct three times more than a 20% one.
- The box / brush / eraser selection tools now work in EVERY view, including Districts (drag a box to grab a whole region's CDs) and Precincts.
- The Focus button now works in the Districts view too: isolate the selected districts and zoom to them; exit restores the full map.
- The national Dem 2P Vote and Turnout sliders (and third-party share sliders) now track the LIVE national result again — moving a demographic group or a local shuffle updates them instead of leaving them frozen at the dialed value. Dragging Dem 2P to 0 or 100 now really zeroes a candidate out (every county saturates instead of stalling ~6% short), the thumb stays where you put it, and returning from the extreme lands exactly on the value you set.
- New "Districts" map mode: congressional districts colored by their precinct-vote margin, with a map picker for every Congress (110th–119th, with term-range labels) plus the current 2026 map; DC is shown as an at-large district. Available on 2008/2016/2020/2024.
- District Shuffler — the demographic sliders move each district by its OWN race/age/education/income composition (not its parent county), for every district map, and the result rolls up to counties and the national / Electoral-College totals.
- Shuffle a single district by hand: click it and drag the swing slider — the shift rolls up to its counties and the national / EC totals.
- Districts support the Swing and Trend views (vs another election) on 2008/2016/2020/2024, and reflect third-party votes (from the precinct data), colored like the county map.
- Maine & Nebraska electoral votes are split using the real per-district results (2008/2016/2020/2024).
- The Districts view shows a live D / R district count; the 2026 map is drawn at higher resolution, and district coastlines now match the county/state maps exactly.
- Map-mode menu regrouped into Movable (County · State · District · Bubbles · Grid) and Visual (Precincts).
- Richer, standardized hover tooltips on every view — candidate breakdown (votes + %), a two-party bar, third parties, and the swing / shuffle shift.
- The Shuffler now fills the screen like a full app — a compact header and an edge-to-edge workspace.
- Added 2024 precinct detail for Oklahoma, from the official state precinct returns. Where Oklahoma County and Tulsa County report early and mail ballots county-wide rather than by precinct, those ballots are distributed across the county's precincts so the map reflects the full vote.
- Refreshed the 2024 precincts for Mississippi, New Hampshire, Rhode Island, and Vermont from official certified precinct returns.
- Filled in South Dakota counties that lacked precinct data — they now show their 2024 county-wide result instead of appearing blank.
- Much smoother sliders: dragging now updates the map and Electoral College live without the lag that made the demographic and third-party sliders feel stuck — and they reach the full range (all the way to 0% and 100%).
- Faster editing overall — moving counties, shuffling groups, and dragging sliders are roughly 10× quicker to recompute.
- Custom states now show their borders in the County and Precincts views, not just the States view: the boundary redraws as you move counties, and a newly drawn state reads as one clean shape.
- The Precincts layer is far less clunky to shuffle and pan — recoloring the block-group detail is several times faster.
- Third parties now show at precinct level too: boost a third-party candidate and the block groups they carry turn that candidate's color, instead of every precinct staying red or blue.
- Each third-party candidate now keeps its OWN electoral votes (in its own color) when more than one carries states — they're no longer lumped together under the leading candidate — and the last custom candidate you add can win states again.
- A brand-new map engine built on MapLibre GL: a smooth, full-width, vector map you can pan and zoom all the way into — replacing the old fixed SVG map.
- New Precincts view — pick "Precincts" in the Map menu (alongside Counties, States, and Bubbles) to read results at the Census block-group level in full detail, right down to the neighborhood.
- Demographic swings now reach the precinct: shuffle a group and each precinct responds to its OWN Census/ACS make-up (race, age, education, income) instead of a flat county-wide change — while every county still adds back up to its real total.
- Cleaner geography: land-clipped county and state borders (no color bleeding into bays or the ocean) that line up exactly with each other.
- More accurate income — each county's real spread across national income brackets, using the right ACS data for each election year.
- Faster and smoother: the MapLibre renderer streams and pans the full-detail precinct layer efficiently, and your shuffle is remembered when you switch between map views.
- Same controls and Electoral College model you know, now on a faster, modular engine.
- Draw brand-new states: select counties and turn them into a state of their own — it gets its own electoral votes, color and borders.
- Redrawn and new states are now fully interactive on the state map — hover to see them, click to select them.
- Borrowing a group’s numbers from another year now actually re-runs the result (it used to only move the slider).
- Focus mode is cleaner: it isolates your selection, hides borders unless the selection spans states, and re-frames the map.
- Polished the redraw controls and fixed the selection and hover outlines on redrawn states.
- Bug reports now go through the new contact page instead of email.
- Added this changelog so you can see what’s changed.
- Added demographic groups for education, age, and income.
- Faster live Electoral College tally — the count updates with no reloads.
- Launched the Shuffler: every U.S. presidential election from 1928 to 2024, re-runnable by demographic group, nationally or county by county.
Heads up: precinct detail is data-heavy and can be laggy, especially zoomed out — give it a moment to load.
Interactive electoral model
Election Shuffler
Pick any presidential election from 1928 to 2024, then re-run it — shuffle the electorate nationally by demographic group, or state by state and county by county. Zoom in for precinct-level (block-group) detail. The map and the Electoral College update live.
The Shuffler is data-heavy — thanks for your patience.
About the Shuffler
Replay a century of American presidential maps
The Election Shuffler is an interactive map that replays every U.S. presidential election since 1928 and lets you ask "what if." Start from any year's real county-level result, then reshape the electorate and watch the outcome change.
You can shuffle nationally — shifting a demographic group's vote across the whole country — or work geographically, adjusting individual states and counties by hand. Each change ripples through the map and the Electoral College tally in real time, so you can see exactly where a shift would matter. Zoom into the county map and switch on the precinct layer to read results at the block-group level, with county swings flowing down to each neighborhood.
It is a tool for understanding realignment: how coalitions formed and came apart, why a state flipped, and how small movements among a single group of voters can swing a national result. Because every scenario is built on actual returns, the maps stay grounded in real geography rather than guesswork.
A century of maps
Every U.S. presidential election from 1928 to 2024, built on real county-level results.
Demographic swings
Shift groups by race, education, age, or income and see the map and Electoral College respond.
National or local
Reshape the whole country at once, or drill down state by state and county by county.
Live tally
The Electoral College count updates the instant you move a slider — no reloads.
How it works
Every group has an absolute Dem two-party vote share and turnout rate, preset to baselines inferred ecologically from county voting patterns (the tick marks). Groups overlap, so moving one shifts related groups across the other tabs for context; the county math applies the directly edited dimension or dimensions, averaging only those direct estimates so unrelated tabs do not dilute the edit. The National row reflects, and uniformly shifts, everything. All shifts carry over when you change the base election.
Notes & sources
County returns from Algara–Sharif (1928–1996), MIT Election Data + Science Lab (2000–2016), and official county canvasses (2020–2024), with pre-1972 state totals reconciled to official results (notably NY, where ALP/Liberal fusion votes for the Democratic nominee were coded third-party, and Alabama’s 1948/1964 Democratic-line slates). Counties created after an older election (La Paz AZ, Cibola NM, Broomfield CO, several Virginia independent cities) are retropolated from their parent county’s vote. Alaska and Hawaii appear from 1960 (statehood) and DC from 1964 (23rd Amendment).
Precinct (block-group) detail — shown when you zoom into the county map — is disaggregated to 2020 census block groups from precinct-level returns published by Dave’s Redistricting App (DRA) and The New York Times, then re-aggregated to each county’s shuffled result. It is a visual detail layer only and does not affect the Electoral College tally.
Race/age/sex from Census county estimates (2019); education and income from ACS via USDA ERS; Metro uses the USDA rural-urban continuum code vintage matched to the base year (1974, 1983, 1993, 2003, 2013 or 2023); ancestry from ACS 2021 self-reported ancestry plus Hispanic origin (people may report two ancestries, so groups overlap; Other includes everyone else plus non-reporters); religion from the 2020 U.S. Religion Census (congregation-reported — approximate). Most demographics are held fixed across years, so older elections with enabled demographic shuffling are read through today’s population; pre-1972 elections disable demographic shuffling.
Group-level third-party sliders move that group’s combined non-major vote share, shifting votes to or from both major parties in proportion. The 3rd-party candidates panel goes further: each named candidate has a vote-share slider whose changes follow the candidate’s real county pattern, plus a draws-from slider setting how much of the change comes from each major party. A state’s electors go gold only when a single candidate, not the combined bloc, leads its vote.
Group leans and turnout are inferred from county-level patterns by bounded ecological regression — estimates, not survey results, and they overstate group differences. Cross-group effects use a county-level independence approximation. Alaska borough results are estimates by RRH Elections / cinyc9 (anchored to official statewide totals). ME/NE district electoral votes are approximated from county composition. All margins are capped at ±100.