Built with blockbuilder.org
Proportional symbols showing electoral votes by state.
Click on the map to show what the electoral votes would look like if we allocated electoral votes only according to the number of House seats, instead of House + Senate seats. This change would make the Electoral College votes would be roughly proportional to the states’ populations. The effect would be to subtract two electoral votes from each state.
Currently, Trump leads 306 to 232. If we subtract 2 votes from each candidate’s states, we get Trump 246, Clinton 190, so Trump would still win the Electoral College. Yes, voters in smaller states do have extra power in the Electoral College, but that is not what caused Trump’s win. The problem is that Clinton’s popular vote was too clustered in a smaller number of states, while Trump had smaller wins across a larger number of states.
Note, however, that in 2000 the over-weighting of small states was a problem. If we did the same adjustment for 2000, instead of Bush 271 vs Gore 266, we would have instead Bush 211 vs Gore 224.
2016 data from: https://github.com/Ryan-J-Smith/presidential_election_county_results_2016
forked from almccon‘s block: USA 2012 presidential election proportional circles
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<script src="//d3js.org/d3.v4.js"></script>
<script src="//d3js.org/topojson.v1.min.js"></script>
<script src="https://d3js.org/d3-queue.v3.min.js"></script>
<style>
body { margin:0;position:fixed;top:0;right:0;bottom:0;left:0; }
svg { width:100%; height: 100% }
</style>
</head>
<body>
<script>
// SORRY THIS CODE IS A MESS!!!
var width = 1000,
height = 800;
// Note: with d3.v4 we can't use "fallback projections"
var projection = d3.geoAlbersUsa()
//.scale(500)
//.translate([width / 2, height / 2]);
var color = d3.scaleLinear()
.domain([20,50,80])
.range(['blue','purple','red']);
var svg = d3.select("body").append("svg");
var background_g = svg.append("g");
var foreground_g = svg.append("g");
var path = d3.geoPath(projection);
d3.json("elpo12p010g.topojson", function(error, usa2012) {
// Add the background
background_g.append("path")
.datum(topojson.feature(usa2012, usa2012.objects.elpo12p010g))
.attr("d", path)
.style("fill", "#ddd")
.on("click", function(d) { updateCircles(); })
});
var stateLookup = {};
var electoralLookup = {};
var barHeight,
circleRadius,
countyCircles;
var trumpStates = [];
var clintonStates = [];
d3.queue()
.defer(d3.json, "ne_50m_admin_1_states.geojson")
.defer(d3.csv, "pres16results.csv")
.defer(d3.csv, "2012-electoral-college.csv")
.awaitAll(function(error, results) {
var states = results[0].features;
var results2016 = results[1];
var electoralCollege = results[2];
results2016.forEach(function(county) {
// This file has counties, but I only want the state results
if (county.fips.match(/[A-Z][A-Z]/) && county.fips != 'US') {
var currentCounty = stateLookup[county.fips];
if (!currentCounty) {
stateLookup[county.fips] = {};
}
stateLookup[county.fips][county.cand_name] = county;
}
});
electoralCollege.forEach(function(state) {
electoralLookup[state.State] = state;
if (+stateLookup[state.State]['Donald Trump'].votes > +stateLookup[state.State]['Hillary Clinton'].votes)
trumpStates.push(state.State);
else
clintonStates.push(state.State);
});
clintonTotals = trumpTotals = 0;
clintonTotalsWithoutSenate = trumpTotalsWithoutSenate = 0;
trumpStates.forEach(function(state) {
trumpTotals += +electoralLookup[state].Electors;
trumpTotalsWithoutSenate += (+electoralLookup[state].Electors - 2);
});
clintonStates.forEach(function(state) {
clintonTotals += +electoralLookup[state].Electors;
clintonTotalsWithoutSenate += (+electoralLookup[state].Electors - 2);
});
console.log("normal rules:");
console.log("Trump:", trumpTotals, "Clinton:", clintonTotals);
console.log("electoral college without senators (-2 for each state):");
console.log("Trump:", trumpTotalsWithoutSenate, "Clinton:", clintonTotalsWithoutSenate);
circleRadius = d3.scaleSqrt()
.domain([0, d3.max(states, function(d) { return +electoralLookup[d.properties.postal].Electors; })])
//.domain([0, d3.max(states, function(d) { return +stateLookup[d.properties.postal]['Donald Trump'].total; })])
.range([0, 50]); // 0 to maximum radius in pixels
// add proportional circles for each county
var countyGroup = foreground_g.append("g").attr("id", "countyCircles");
countyCircles = countyGroup.selectAll("path")
.data(states.sort(function(a,b) { return stateLookup[b.properties.postal]['Donald Trump'].total - stateLookup[a.properties.postal]['Donald Trump'].total}))
.enter().append("circle")
.attr("transform", function(d) { return "translate(" + projection([+d.properties.lon,+d.properties.lat]) + ")"; })
.attr("r", function(d) {
/*
if (stateLookup[d.properties.postal] && stateLookup[d.properties.postal]['Donald Trump']) {
return circleRadius(+stateLookup[d.properties.postal]['Donald Trump'].total);
} else {
console.log("couldn't find lookup", d.properties.postal);
return 0;
}
*/
return circleRadius(+electoralLookup[d.properties.postal].Electors);
})
.style("fill", function(d) {
if (stateLookup[d.properties.postal] && stateLookup[d.properties.postal]['Donald Trump']) {
return color(100 * +stateLookup[d.properties.postal]['Donald Trump'].pct);
} else {
return 'black';
}
})
.classed("countycircle", true)
.on("click", function(d) { updateCircles(); })
//.on("mouseover", function(d) { console.log(d); });
});
var mode = 'normal';
function updateCircles() {
//var countyCircles = d3.select('.countycircle');
if (mode == 'normal')
mode = 'without_senators';
else
mode = 'normal';
if (mode == 'normal') {
countyCircles
.transition()
.attr("r", function(d) {
return circleRadius(+electoralLookup[d.properties.postal].Electors);
})
} else {
countyCircles
.transition()
.attr("r", function(d) {
return circleRadius(+electoralLookup[d.properties.postal].Electors - 2);
});
}
return mode;
}
</script>
</body>
State,Name,Electors,Population
AK,Alaska,3,710000
AL,Alabama,9,4780000
AR,Arkansas,6,2916000
AZ,Arizona,11,6392000
CA,California,55,37254000
CO,Colorado,9,5029000
CT,Connecticut,7,3574000
DC,Dist. of Col.,3,602000
DE,Delaware,3,898000
FL,Florida,29,18801000
GA,Georgia,16,9688000
HI,Hawaii,4,1360000
IA,Iowa,6,3046000
ID,Idaho,4,1568000
IL,Illinois,20,12831000
IN,Indiana,11,6484000
KS,Kansas,6,2853000
KY,Kentucky,8,4339000
LA,Louisiana,8,4533000
MA,Massachusetts,11,6548000
MD,Maryland,10,5774000
ME,Maine,4,1328000
MI,Michigan,16,9884000
MN,Minnesota,10,5304000
MO,Missouri,10,5989000
MS,Mississippi,6,2967000
MT,Montana,3,989000
NC,North Carolina,15,9535000
ND,North Dakota,3,673000
NE,Nebraska,5,1826000
NH,New Hampshire,4,1316000
NJ,New Jersey,14,8792000
NM,New Mexico,5,2059000
NV,Nevada,6,2701000
NY,New York,29,19378000
OH,Ohio,18,11537000
OK,Oklahoma,7,3751000
OR,Oregon,7,3831000
PA,Pennsylvania,20,12702000
RI,Rhode Island,4,1053000
SC,South Carolina,9,4625000
SD,South Dakota,3,814000
TN,Tennessee,11,6346000
TX,Texas,38,25146000
UT,Utah,6,2764000
VA,Virginia,13,8001000
VT,Vermont,3,626000
WA,Washington,12,6725000
WI,Wisconsin,10,5687000
WV,West Virginia,5,1853000
WY,Wyoming,3,564000