Source data for the mid-decade redistricting map
Source data for the mid-decade redistricting map
../data.csv is the table the map reads: one row per state, with the party that
drew the map, its status, and the expected partisan seat shift (exp) and its
range across elections (lo, hi). This folder holds the data those numbers
come from, so the page and its evidence sit together.
<ST>_map_old.csv / <ST>_map_new.csv
One row per district, one column per statewide election. Each cell is the
Democratic share of the two-party vote in that district under that plan:
Dem / (Dem + Rep), computed from precinct results disaggregated to districts.
_old is the plan in force before the mid-decade redraw, _new the plan that
replaced it. The two files for a state always carry the same set of elections.
Precinct results are VEST’s; the plans and the disaggregation are Dave’s
Redistricting App. Generated by compare-plans-dra/_DRA_elections.R in the
createMaps repository, which writes
these files here and into that repo’s mid-decade-redistricting/data/.
How exp, lo, and hi follow from them
For each election column, a district is a Democratic seat when its value exceeds 0.5. That gives a seat count per election under each plan.
expis the mean seat count under the old plan minus the mean under the new one, averaged over the elections — the expected seats the drawing party gains.loandhiare the smallest and largest of that same difference across individual elections, so they bracket how much the answer depends on which election you look at.
Signs in data.csv are oriented toward the state’s drawing party, so a
Democratic gerrymander (California, Virginia) is recorded as a positive number
for the Democrats rather than a negative one for the Republicans.
Recomputing that way reproduces data.csv exactly:
| State | Districts | Elections | exp | lo | hi |
|---|---|---|---|---|---|
| CA | 52 | 12 | 6.25 | 3 | 9 |
| FL | 28 | 13 | 2.23 | 1 | 4 |
| LA | 6 | 16 | 0.69 | 0 | 1 |
| MO | 8 | 19 | 0.89 | 0 | 1 |
| NC | 14 | 27 | 0.52 | -1 | 1 |
| OH | 15 | 20 | 0.65 | -1 | 2 |
| SC | 7 | 12 | 1.00 | 1 | 1 |
| TN | 9 | 8 | 1.00 | 1 | 1 |
| TX | 38 | 17 | 3.29 | 2 | 5 |
| UT | 4 | 16 | 0.94 | 0 | 1 |
| VA | 11 | 12 | 3.08 | 2 | 4 |
Two states here carry no numbers on the map, for different reasons.
South Carolina never passed a new map, so SC_map_new.csv scores a proposal,
not a plan that ever existed in law. data.csv records the state as
possible / blocked and leaves exp, lo, and hi empty: there is no
enacted redraw to attribute a seat shift to. That is not the same as Virginia,
which is partisan / blocked — a map did pass there and was then blocked, so
its 3.08 / 2 / 4 is a real shift from a real plan, shown struck through. The
mid_decade column is what separates the two cases; status alone does not.
PA_map_old.csv and PA_map_new.csv are a separate analysis of Pennsylvania’s
203 state house districts, not a congressional mid-decade redraw; they are kept
for reference and are not part of the map.
Relation to ../elections.csv
../elections.csv is what the per-election detail table under the map reads:
one row per election per state, giving the seat split under each plan. These
files are the layer below it — the district-level shares those seat counts are
collapsed from.
Texas and Florida came into elections.csv from democracys-data. The other
eight states — California, Louisiana, Missouri, North Carolina, Ohio,
Tennessee, Utah, and Virginia — were counted from the files here, applying the
same rule (a district is a Democratic seat above 0.5). Every one reproduces the
exp, lo, and hi already in data.csv, and Texas and Florida come out the
same from either route, which is the check that the two pipelines agree.
elections.csv stores the change as rep_new - rep_old, so a Democratic
gerrymander is a negative number there; data.csv orients the same quantity
toward whichever party drew the map, so it is positive for California, Utah,
and Virginia.
Two gaps are not fillable from this folder. Alabama has values on the map but no district-level files here, so it has no detail table. South Carolina has files but no map value, for the reason above.
Vote share, uniform swing, and the dummymander point
The “When does the new map backfire?” panel in the detail table is computed in the browser from these files; nothing is precomputed. It asks what each map does when every election is held at the same two-party split, so that a state can be read at, say, 45–55 rather than at whatever its particular candidates happened to win.
An election’s vote share is its average district: the mean of a column, taken
under each plan and then averaged between the two. (The plans average slightly
differently because turnout varies by district; taking the midpoint keeps a
single shift for both, so they are always scored on the same votes.) To set an
election to a Democratic share V, every district under both plans moves by
V minus that election’s own share, and seats are recounted with the 0.5 rule.
Doing that for every election and averaging, for V from 25 to 75 percent in
tenths of a point, gives the chart’s two panels: the drawing party’s (the
party in ../data.csv) average seats under each plan, and below them the gap,
new plan’s seats minus old plan’s. Each plan’s seats can only move one way as
V changes; the gap can rise and fall, because the plans tip their districts
at different shares, and it returns toward zero at both ends, where either plan
gives one party nearly every seat. Every election counts equally in the average.
A gray band around the gap shows the lowest and highest single-election gap at
each share, and under the table a small chart for each election draws its own
two seat curves on the same scales, with its own backfire point measured from
its own result, so the averages can be read against how much the elections
disagree. Until a share is
chosen, the table shows the unshifted counts, which are ../elections.csv row
for row; once one is, every row is that election moved to the chosen split.
The map is a dummymander wherever the average gain falls below zero: with the same votes, the old plan would have won the drawing party more seats. The backfire point the page reports is the nearest such share to the average of the actual results, moving against the drawing party. Some maps also fall behind in the drawing party’s own wave, when the old lines would have converted the extra votes into more seats; the chart shades that zone too, but the page only spells it out in words for Utah, the one state with no backfire point the other way.
| State | Drawn by | Avg. actual D share | Backfires below (drawing party’s share) | Points below its avg. | Also behind above | Gain at D 55% | at 50% | at 45% |
|---|---|---|---|---|---|---|---|---|
| CA | D | 61.4 | 55.1 | 6.3 | — | −0.42 | −5.83 | −3.83 |
| FL | R | 46.1 | 47.7 | 6.2 | 61.3 | −3.23 | +1.62 | +3.23 |
| LA | R | 36.5 | 45.2 | 18.3 | 70.7 | −0.31 | +1.00 | +1.00 |
| MO | R | 42.0 | 49.1 | 8.9 | — | −2.47 | +0.37 | +1.00 |
| NC | R | 49.6 | 47.0 | 3.4 | — | −0.70 | +0.56 | +0.19 |
| OH | R | 44.6 | 45.9 | 9.5 | 55.8 | −0.65 | +0.95 | +0.60 |
| TN | R | 37.7 | 53.0 | 9.3 | — | −2.00 | −3.00 | +0.25 |
| TX | R | 46.3 | 44.2 | 9.5 | — | +0.59 | +2.00 | +3.53 |
| UT | D | 33.6 | — | — | 48.4 | −2.69 | −1.06 | +1.00 |
| VA | D | 53.4 | 46.0 | 7.4 | 72.0 | +3.33 | +2.08 | −1.83 |
Shares are percentages of the two-party vote, and “drawing party’s share” is
the Democratic share for California, Utah, and Virginia and the Republican share
for the rest. Gains are the drawing party’s average seat gain from the new map,
so a negative number is a dummymander at that split. A dash means no crossing
between 25 and 75 percent. South Carolina’s files would support the same
calculation, but it has no rows in ../elections.csv, so the page shows no
detail table or panel for it.
The usual limits of uniform swing apply. Every district moves by the same
amount, so it says nothing about where a real swing would be concentrated; the
average district is not the statewide vote, and can differ from it by a point or
two; and averaging across elections smooths over candidate-specific geography:
in North Carolina and Ohio a few of the actual elections already sit past the
backfire point, which is why their lo in ../data.csv is −1.
The “Backfires below” column is also stored in ../data.csv as backfire, so
the map’s value tiles can show it on first paint, before these files load.
Unlike exp, lo, and hi, the page recomputes it from these files and logs
a console warning for any state where the stored value differs by more than
0.05, so a change to the district files that isn’t carried into data.csv
shows up in the browser console. Utah’s is left empty: its map has no backfire
point as Democrats lose ground.
redistrict-map.csv
The state-level table the original mapshaper build styled its choropleth from:
2020 census population, whether the redraw was partisan, court-ordered, or
possible, its status, and the drawing party, for all fifty states and D.C.
(999 and NA mark states with no mid-decade activity.) ../data.csv
supersedes it for the web map — it covers only the seventeen states the map
labels, and adds the seat-shift columns and the label-offset columns dx/dy
— but this is the file _createMaps.sh still joins to the state geometry.
Not copied here
states.json (8.2 MB) in createMaps is the unprojected source geometry.
../states.topojson is the projected, simplified build product the page
actually loads, with each state’s guaranteed-inside label anchor baked in, so
the source is left in createMaps rather than duplicated into the site.