NCDistricts EthrynNorth Carolina · District workspace4.18.3
Loading map geometry and data…

North Carolina

District workspace

Historical election comparison · 2020 population

Experimental whole-precinct map · historical comparison, not a forecast

STATE SENATE · 50 SEATS

County-grouping preview

Select a county group to see its counties, population, seats and combined votes. Drag to pan · pinch or scroll to zoom.

Arrangements allowed in automatic search 16 of 16

Each checkbox controls a complete statewide arrangement. Uncheck one to exclude it from automatic exploration. Enter locks the arrangement currently shown above.

All 26 county groups and their seats
THE UNDERLYING RECORD

Four years of elections.

Browse actual NCSBE precinct-sorted returns, including primaries, municipal races and statewide contests. These are original election-vintage precincts.

632 county-election files11 precinct-sort dates7.36m source rows2026 excluded pending sort

Coverage and gaps

2023 and 2025 were primarily local elections: an absent race or precinct is not a zero-vote result. May 14, 2024 precinct results are unavailable to protect ballot secrecy. December 6, 2022 and March 7, 2023 have ordinary returns only; these remain separate from geographic modeling.

Precinct-sort totals contain official privacy noise and can differ from certified totals. Bladen’s 2024 presidential sort differs from ordinary returns by 448 Democratic and 427 Republican votes; the cause is unverified, and the source values are retained.

SOURCES / ASSUMPTIONS / LIMITS

Know what the map knows.

Data vintages and modeling choices are part of every result. Updated November 7, 2026.

Partisan targets and margins

Target mode jointly redraws two or three neighboring districts, testing connected concentrations of opposition votes and distributions that create additional wins. After reaching the requested D/R split, it prioritizes the weakest favored seats and reduces the variance of their winning margins. The party with more requested seats is favored; an equal split protects both parties. The one-narrow-win setting excludes the weakest favored seat from the margin-balancing calculation.

Population repair retains the seat split. Compact mode also limits perimeter and spatial spread; county interiors and locked districts remain constraints. These priorities can conflict, so the result reports actual seats, population deviation, margin range and standard deviation. This is a heuristic search over historical results, not a proof of optimality or a forecast. Drawing one seat permanently at a time can strand the remaining population; regional proposals are therefore accepted only with their connected remainder.

Recombination research · Geographic constraints on packing and cracking

Current maps, historical people

The map uses NCSBE’s August 24, 2026 statewide precinct boundaries. The 2020 Census supplies population, race, Hispanic origin, adult population, housing and group quarters. All 236,638 blocks are assigned using their official internal point; this is a geographic allocation, not a claim that 2026 precincts existed in 2020.

Every populated block falls within a source precinct. Seven zero-population blocks required a within-county nearest-geometry fallback. Source geometry is unsimplified for adjacency; display geometry repairs narrow unassigned source gaps, uses shared edges and is simplified to 20 metres and clipped to a Census 2025 cartographic land outline. Water territory still participates in connectivity calculations.

Display topology and gap-repair provenance ↓ · Road sources ↓ · Boundary provenance & hashes ↓

Detailed estimates, with uncertainty

25 ACS tables provide 361 measures at block-group or tract level, with 90% margins of error. Precinct estimates use 2020 population weights for persons, occupied housing weights for household measures, total housing weights for all-housing-unit measures, and VAP weights for CVAP. Medians remain source-geography values and are never summed into a district median.

District MOEs first combine weights for each source geography, then use root-sum-of-squares. They exclude allocation error and covariance between different source geographies. CVAP also includes official statistical privacy noise.

Demographic provenance & hashes ↓

Votes follow a documented crosswalk

2022–2025 results remain in their original precincts in the election archive. Election baselines, including the added 2020 presidential and governor races, are allocated from historical polygons onto 2026 precincts using 2020 adult-population shares. This assumes uniform candidate support inside each original precinct. It does not recover individual ballots or exact votes in newly drawn precincts.

Exact IDs are preferred, followed by unique normalized codes or names within the same county. Unmatched records stay visible and are excluded from modeled vote totals. Other-party votes are preserved but the seat model compares D and R only.

Scenarios, joins & unmatched records ↓

A transparent search

Dragging clears the unlocked map and gathers a live, connected blob of actual precincts near the pointer. Its population stays near the district target and its color uses the combined totals for the selected political or demographic layer. On release, that exact set of precincts stays fixed while the remaining districts rebuild. Locks retain exact membership and nested children stay inside their parents. Selection uses population and geography, not political data. Undo restores the previous map.

The blended baseline averages four precinct two-party shares equally (2020/2024 President and Governor), then weights district aggregation by mean turnout. Optional uniform swing changes margin points with precinct shares capped at 0–100%. These produce comparison weights, not actual vote totals.

The designer recursively partitions randomized spanning trees, then moves boundary precincts while checking both affected districts for connectivity. Population deviations are heavily penalized. Compact mode penalizes cut adjacency edges. Winding mode allows connected corridors and balanced precinct exchanges in pursuit of the selected objective; it does not reward extra jagged edges. Blind mode strips election votes before passing data to the generator. County preservation penalizes unnecessary county fragments, while allowing large counties to span multiple districts. Neither is a guarantee of a global optimum.

Proportional balance targets a Democratic seat share near the chosen statewide two-party vote share. Toss-up districts have an absolute two-party margin under 5 percentage points. The optional yellow view marks those districts. Seat-target and proportional searches prioritize the party goal over soft county and shape preferences after population balance; they test connected regional repartitions as well as local exchanges. Population error now ranks first, followed by a dedicated connected exchange pass that keeps reducing differences, even below the chosen target. Seat targets are search goals; unmet goals are reported. Approximate Polsby–Popper scores use source polygon perimeters, include water territory, and are analytical measures only.

Each page load and new generation uses a fresh random seed by default. Connected, population-aware growth regions are reserved before one random starting precinct in each expands. That flood fill becomes the actual starting plan for optimization. The completed regions carry straight into connected boundary exchanges, neighboring-region refinements and population repair; a separate initializer does not replace the displayed map. County-aware starting cuts and stronger county penalties reduce unnecessary fragmentation. These remain search preferences; large counties may require multiple districts. A fixed seed helps reproduce the search path, but time-limited runs can differ by device speed. Exported assignments are the authoritative way to reproduce a result.

Seat safety in target mode

The larger requested seat count determines the favored party. An equal split protects wins for both parties. The search pursues the requested count, then gives diminishing returns to larger margins so strengthening vulnerable seats is worth more than adding votes to already strong seats. “Allow one narrow win” excludes the weakest favored seat from margin scoring while still requiring it to remain a win. Five margin points is the existing toss-up display threshold, not a forecast or a guarantee of winning. The current historical baseline and uniform swing feed both the seat target and margin objective. Population, contiguity, locks and nested containment remain constraints.

Nested maps and geographic features

Nested generation draws State House districts first. It then searches connected groups of the requested number of State House districts per State Senate district, followed by connected groups of State Senate districts per U.S. House district. Merge swaps pursue the selected generation mode while keeping the required child counts exact. Descendants never move outside their parent. All three levels are checked for polygon connectivity and containment; population deviation is reported against each level’s statewide ideal. The example 14 → 42 → 168 hierarchy is hypothetical.

Geographic overlays include 17 NCDEQ river basins, 43 named USGS major-river features and 125 named water polygons. The View menu also includes official Census 2025 interstate and major-highway layers. City labels are placed with screen-space collision checks. These selected small-scale features do not include every stream, mountain ridge or local obstacle.

“Follow major rivers” penalizes joining adjacent precincts across a river-aligned shared boundary: at least 500 metres and 25% of that boundary must lie within 250 metres of a selected river centerline. “Keep river basins together” discourages separating neighboring precincts assigned to the same dominant-area basin. These are approximations and soft preferences; the tool does not remove geographic connections, assume rivers are impassable, or guarantee that a district follows a river. Precincts that straddle a basin or river remain whole.

The seat diagram follows the US-style arch concept in Parliament Diagrams. It uses the reference election graphic’s 14, 50 and 120 seat placements and original rendering code. Map-derived seats reflect the selected historical two-party scenario; custom diagrams may also include independent and vacant seats.

Physical-geography provenance & hashes ↓

Representation and lawful use

Demographic views support civil-rights review and representation analysis. This tool does not optimize dilution of a racial or ethnic group’s voting power, and it does not equate maximizing the number of majority-minority districts with maximizing electoral opportunity. Racially polarized voting and current legal requirements require further analysis.

The optional strict NC Senate mode explores all 16 optimal grouping arrangements identified by the 2020 Census county/population analysis. Each has 26 groups covering all 100 counties and allocating 50 seats. Seventeen groups are fixed; four regions each have two alternatives. A seed determines the exploration order, or you can select a specific arrangement. The adopted 2023 arrangement remains available, and saved plans record the exact grouping used. It checks group containment, seat counts, minimum traversals, district and county-piece connectivity, and population within ±5% of the statewide ideal. Invalid results are rejected rather than displayed as compliant. Neutral mode uses only population and geography. Favor Democrats or Favor Republicans searches for more seats under the selected election comparison while keeping compact shapes and all strict rules. Manual redrawing requires turning strict mode off. The other modes retain soft county preferences. Grouping data and official sources. Grouping validation does not certify compliance with the Voting Rights Act or all other legal requirements. Congressional population equality generally requires block-level splitting, beyond this whole-precinct tool. A connected plan with a favorable metric is still an experimental plan.

District margins

File

Map settings

District plan

Population is the first priority. The search keeps reducing deviations beyond the target where whole precincts allow.

Drawing goals

Neutral generation receives no partisan votes. Historical results are calculated after the map is drawn.

Winding mode allows reaching across connected precincts to improve the selected objective. It does not reward extra jagged edges.

Build interior districts in large counties, then combine remaining neighboring areas. Whole-precinct population limits can require county splits.

Search for more districts above 50% of modeled citizen voting-age population. Combined means everyone except non-Hispanic White alone. A numerical majority does not establish voting opportunity or legal compliance.

Search and comparison

Turn off random starts to reuse a seed. Exported plans record the seed and exact assignments.

Generation checks contiguity

Generated districts must connect. Dragging also preserves connectivity and population balance; exact equality may require splitting precincts.

Edit districts

Drag a dot to move a population-sized blob of precincts. Its color updates as the precincts change. Release to keep that exact blob and rebuild around it. Esc cancels; Undo restores the previous map.

Locks preserve exact precinct membership. A parent containing a locked descendant is protected. Nested children move inside their parents. Regeneration uses your goals with population first. Dragging preserves the released precinct selection and redraws around it with locks fixed.

View

Map appearance
Boundary lines · combine any

Available after generating or importing a verified Senate county-grouping map.

Compare all 16 statewide arrangements and choose which ones the search can use.

Geographic layers

Road layers are geographic references. They do not change contiguity or become automatic boundaries.

Interstate Major highway
Seat diagram

Data

People and place

PEOPLE & PLACE

North Carolina

Statewide demographic profile

Representation analysis

Review race, ethnicity, VAP and CVAP by district. A majority threshold is a descriptive measure, not proof of voting opportunity or legal compliance.

Plan results

Loading…
Gallagher index · swing sensitivity

Lower values mean D/R seat shares more closely match D/R vote shares. This is a two-party measure, excluding other-party votes. The range is the minimum–maximum at 11 shifts, −5 to +5 margin points relative to the current swing. Boundaries and turnout stay fixed; precinct shares are capped at 0–100%. Exact ties count as half a seat per party (*). Yellow toss-ups still count by their actual lead. The sampled range is not a confidence interval or a continuous bound.

G = √[½ Σ(vote percentage − seat percentage)²]. Formula reference

READY FOR THE NEXT RELEASE

Add precinct-sorted results

Load a completed, residential-precinct sort as a new D / R scenario. November 2026 is not included by default. Imported data stays in this browser session; export a plan to retain the scenario.

CSV columns: county_id,precinct_code,dem,rep,other. Every current precinct must appear exactly once. County IDs are NCSBE’s 1–100 IDs, not Census FIPS. If boundaries changed, prepare and review a new geographic crosswalk before importing.

Browser imports stay in this session. Updating the public website requires publishing verified data files on your server.

New blank map

All precincts start unassigned. Paint connected districts, track their population, and save unfinished drafts.