Political biography · State presidential returns
Virginia
election history.
Presidential votes, closest contests and political movement from 2000 through 2024.
Saved history is ready below. Interactive controls require JavaScript.
State context · blue toward D · red toward R · gray unavailable
How Virginia voted
In 2000, Virginia recorded 1,217,290 Democratic votes and 1,437,490 Republican votes out of 2,739,447 ballots. In 2024, the corresponding counts were 2,333,778, 2,074,097 and 4,503,288. The margin was R +8.04 in 2000 and D +5.77 in 2024.
The closest available D/R contest was 2012, with a D +3.87 margin. Movement relative to the country is local margin change minus national margin change; it distinguishes a local shift from a nationwide wave.
| Election | Democratic votes | Republican votes | Other ballots | Total ballots | D share | R share | D−R margin | U.S. margin |
|---|---|---|---|---|---|---|---|---|
| 2000 | 1,217,290 | 1,437,490 | 84,667 | 2,739,447 | 44.44% | 52.47% | R +8.04 | D +0.49 |
| 2004 | 1,454,742 | 1,716,959 | 23,714 | 3,195,415 | 45.53% | 53.73% | R +8.21 | R +2.43 |
| 2008 | 1,959,532 | 1,725,005 | 38,723 | 3,723,260 | 52.63% | 46.33% | D +6.30 | D +7.40 |
| 2012 | 1,971,820 | 1,822,522 | 60,147 | 3,854,489 | 51.16% | 47.28% | D +3.87 | D +3.94 |
| 2016 | 1,981,473 | 1,769,443 | 231,836 | 3,982,752 | 49.75% | 44.43% | D +5.32 | D +2.18 |
| 2020 | 2,413,568 | 1,962,430 | 84,526 | 4,460,524 | 54.11% | 44.00% | D +10.11 | D +4.45 |
| 2024 | 2,333,778 | 2,074,097 | 95,413 | 4,503,288 | 51.82% | 46.06% | D +5.77 | R +1.47 |
Virginia county election histories
- Waynesboro city →
- Emporia city →
- Buena Vista city →
- Danville city →
- Galax city →
- Harrisonburg city →
- Martinsville city →
- Charlottesville city →
- King George County →
- Richmond County →
- Scott County →
- Botetourt County →
- York County →
- Rappahannock County →
- Greene County →
- Radford city →
- Louisa County →
- Salem city →
- Hopewell city →
- Falls Church city →
- Lexington city →
- Cumberland County →
- Pulaski County →
- Loudoun County →
- Appomattox County →
- Norton city →
- Henrico County →
- Franklin city →
- Henry County →
- Hampton city →
- Highland County →
- King William County →
- Montgomery County →
- Richmond city →
- Amherst County →
- Mathews County →
- Petersburg city →
- Goochland County →
- Albemarle County →
- Prince Edward County →
- Caroline County →
- Fluvanna County →
- Northumberland County →
- Isle of Wight County →
- Manassas Park city →
- King and Queen County →
- Bristol city →
- Colonial Heights city →
- Tazewell County →
- Clarke County →
- Halifax County →
- Arlington County →
- Surry County →
- Warren County →
- Washington County →
- Wise County →
- Winchester city →
- Charles City County →
- Page County →
- Bland County →
- Sussex County →
- Lunenburg County →
- Buchanan County →
- Mecklenburg County →
- Amelia County →
- Gloucester County →
- Shenandoah County →
- Dickenson County →
- Staunton city →
- Floyd County →
- Roanoke city →
- Alleghany County →
- Giles County →
- Franklin County →
- Bath County →
- Pittsylvania County →
- Northampton County →
- Culpeper County →
- James City County →
- Fauquier County →
- Orange County →
- Lynchburg city →
- Campbell County →
- Norfolk city →
- Poquoson city →
- Portsmouth city →
- Chesterfield County →
- Suffolk city →
- Craig County →
- Frederick County →
- Chesapeake city →
- Dinwiddie County →
- Powhatan County →
- Greensville County →
- Hanover County →
- Rockbridge County →
- Spotsylvania County →
- Stafford County →
- Carroll County →
- Newport News city →
- Grayson County →
- Accomack County →
- Prince George County →
- New Kent County →
- Wythe County →
- Patrick County →
- Southampton County →
- Charlotte County →
- Rockingham County →
- Williamsburg city →
- Smyth County →
- Middlesex County →
- Alexandria city →
- Brunswick County →
- Fairfax city →
- Manassas city →
- Nottoway County →
- Prince William County →
- Russell County →
- Buckingham County →
- Augusta County →
- Madison County →
- Fairfax County →
- Westmoreland County →
- Lancaster County →
- Essex County →
- Bedford County →
- Roanoke County →
- Fredericksburg city →
- Virginia Beach city →
- Nelson County →
- Covington city →
- Lee County →
Sources and methods
Presidential votes: MIT Election Data and Science Lab county returns, 2000–2024, version 20 and MEDSL statewide presidential returns. Percentages use all recorded ballots; the margin is Democratic share minus Republican share. “Other ballots” is total ballots minus Democratic and Republican votes. It includes third-party/write-in votes and any residual or invalid ballot counts included in the source denominator; it is not necessarily a count of votes for other candidates. A swing is the difference between two margins; national-adjusted swing subtracts the U.S. change over the same period. State and national profiles use statewide returns, not sums of incomplete county returns.
The county original CSV is an archived public mirror of MEDSL’s February 25, 2026 revision, with matching revision and original file size. Direct Harvard downloads require a personal guestbook; an independent official checksum match has not been certified. Download links, provenance, selection rules and SHA-256 checksums document the source and preserve the exact bytes used here. Recorded electoral votes come from the National Archives, including split Maine/Nebraska districts, faithless electors and abstentions.
Maps use the Census-derived us-atlas legacy county boundaries. Connecticut retains eight legacy counties, matching these returns. Oglala Lakota’s FIPS rename is harmonized. Bedford city and county are added for years before their merger when valid returns exist. Comparisons crossing Broomfield’s 2001 creation are unavailable for the five affected Colorado counties. Alaska’s voting districts and separately reported Kansas City votes cannot be safely assigned to these county boundaries: use statewide history and whole-state merges. Missing or inconsistent returns stay unavailable.
Border Lab uses 2020 Census resident population bases, Vintage 2021, with legacy Connecticut counties. Alaska’s statewide population remains intact. Statewide votes not assigned to comparable counties stay with their original state; a whole-state merge transfers that residual. A move with missing historical votes makes that election replay unavailable. The population snapshot stays fixed across historical replays. Metro experiments use March 2020 Census metropolitan delineations; these statistical areas are not proposed legal states. The population-balancing preset starts from original borders and greedily transfers adjacent counties to reduce squared imbalance without increasing graph fragmentation, up to 150 transfers. It preserves 50 regions and does not promise an optimal or equal-population partition.
House seats use the Census equal-proportions method: one initial seat per region, then priority population ÷ √(n × (n + 1)). Border Lab uses resident population; Same Votes, Different Rules uses historical Census apportionment populations, which include allocated overseas residents. Proportional electoral allocation uses Hamilton largest remainder with whole electors, across D, R and a combined other-ballot bucket; exact remainder ties use D, then R, then other. Winner-takes-all ties leave electors unallocated. No majority is reported honestly; contingent-election outcomes are not simulated.
These experiments hold recorded votes fixed. They are mechanical counterfactuals, not predictions of behavior, turnout, campaigns or constitutional validity. Ordinary vote totals cannot recover ranked preferences. Twin matches require complete comparable histories across the selected period; RMS distance equally weights each election margin or each consecutive change. Equal movement does not imply similar political levels, demographics, motives or individual voters.