Skip to content

Instantly share code, notes, and snippets.

@mrcnc
Last active March 24, 2020 04:45
Show Gist options
  • Save mrcnc/8f01aaafe1c0a56eb55d62c071936a53 to your computer and use it in GitHub Desktop.
Save mrcnc/8f01aaafe1c0a56eb55d62c071936a53 to your computer and use it in GitHub Desktop.
front end party 2020-03-24 value-by-alpha map
<!DOCTYPE html>
<html lang="en">
<head>
<title>Front End Party | Value-by-alpha Map</title>
<script src="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.1.1/build/ol.js"></script>
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.1.1/css/ol.css"
type="text/css"
/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/chroma-js/2.1.0/chroma.min.js"></script>
<style>
#container { display: flex; }
#map {
flex: 1;
height: 500px;
}
#colorScale {
flex: 1;
}
.grad-step {
display: inline-block;
height: 20px;
width: 1%;
}
</style>
</head>
<body>
<div id="container">
<div id="map"/></div>
<div id="colorScale"/></div>
</div>
<script>
const turnoutStats = [
{
"parish_name": "Acadia",
"total_registered": 39335,
"total_voted": 19945,
"total_turnout_percentage": 51,
"total_registered_democrats": 16859,
"total_voted_democrats": 8893,
"total_turnout_percentage_democrats": 53,
"total_registered_republicans": 12757,
"total_voted_republicans": 7788,
"total_turnout_percentage_republicans": 61,
"total_registered_other": 9719,
"total_voted_other": 3264,
"total_turnout_percentage_other": 34
},
{
"parish_name": "Allen",
"total_registered": 13572,
"total_voted": 6284,
"total_turnout_percentage": 46,
"total_registered_democrats": 6256,
"total_voted_democrats": 3112,
"total_turnout_percentage_democrats": 50,
"total_registered_republicans": 3982,
"total_voted_republicans": 2225,
"total_turnout_percentage_republicans": 56,
"total_registered_other": 3334,
"total_voted_other": 947,
"total_turnout_percentage_other": 28
},
{
"parish_name": "Ascension",
"total_registered": 78214,
"total_voted": 40874,
"total_turnout_percentage": 52,
"total_registered_democrats": 27768,
"total_voted_democrats": 16607,
"total_turnout_percentage_democrats": 60,
"total_registered_republicans": 28651,
"total_voted_republicans": 16298,
"total_turnout_percentage_republicans": 57,
"total_registered_other": 21795,
"total_voted_other": 7969,
"total_turnout_percentage_other": 37
},
{
"parish_name": "Assumption",
"total_registered": 14988,
"total_voted": 8743,
"total_turnout_percentage": 58,
"total_registered_democrats": 8742,
"total_voted_democrats": 5549,
"total_turnout_percentage_democrats": 63,
"total_registered_republicans": 3250,
"total_voted_republicans": 1991,
"total_turnout_percentage_republicans": 61,
"total_registered_other": 2996,
"total_voted_other": 1203,
"total_turnout_percentage_other": 40
},
{
"parish_name": "Avoyelles",
"total_registered": 24395,
"total_voted": 13608,
"total_turnout_percentage": 56,
"total_registered_democrats": 12454,
"total_voted_democrats": 7231,
"total_turnout_percentage_democrats": 58,
"total_registered_republicans": 6098,
"total_voted_republicans": 4014,
"total_turnout_percentage_republicans": 66,
"total_registered_other": 5843,
"total_voted_other": 2363,
"total_turnout_percentage_other": 40
},
{
"parish_name": "Beauregard",
"total_registered": 22441,
"total_voted": 11596,
"total_turnout_percentage": 52,
"total_registered_democrats": 6372,
"total_voted_democrats": 3441,
"total_turnout_percentage_democrats": 54,
"total_registered_republicans": 9036,
"total_voted_republicans": 5539,
"total_turnout_percentage_republicans": 61,
"total_registered_other": 7033,
"total_voted_other": 2616,
"total_turnout_percentage_other": 37
},
{
"parish_name": "Bienville",
"total_registered": 9103,
"total_voted": 5548,
"total_turnout_percentage": 61,
"total_registered_democrats": 4762,
"total_voted_democrats": 3073,
"total_turnout_percentage_democrats": 65,
"total_registered_republicans": 2623,
"total_voted_republicans": 1729,
"total_turnout_percentage_republicans": 66,
"total_registered_other": 1718,
"total_voted_other": 746,
"total_turnout_percentage_other": 43
},
{
"parish_name": "Bossier",
"total_registered": 71999,
"total_voted": 36535,
"total_turnout_percentage": 51,
"total_registered_democrats": 19844,
"total_voted_democrats": 10474,
"total_turnout_percentage_democrats": 53,
"total_registered_republicans": 32367,
"total_voted_republicans": 19076,
"total_turnout_percentage_republicans": 59,
"total_registered_other": 19788,
"total_voted_other": 6985,
"total_turnout_percentage_other": 35
},
{
"parish_name": "Caddo",
"total_registered": 158509,
"total_voted": 77535,
"total_turnout_percentage": 49,
"total_registered_democrats": 75641,
"total_voted_democrats": 39718,
"total_turnout_percentage_democrats": 53,
"total_registered_republicans": 44222,
"total_voted_republicans": 25210,
"total_turnout_percentage_republicans": 57,
"total_registered_other": 38646,
"total_voted_other": 12607,
"total_turnout_percentage_other": 33
},
{
"parish_name": "Calcasieu",
"total_registered": 126986,
"total_voted": 56353,
"total_turnout_percentage": 44,
"total_registered_democrats": 50008,
"total_voted_democrats": 24854,
"total_turnout_percentage_democrats": 50,
"total_registered_republicans": 40514,
"total_voted_republicans": 21139,
"total_turnout_percentage_republicans": 52,
"total_registered_other": 36464,
"total_voted_other": 10360,
"total_turnout_percentage_other": 28
},
{
"parish_name": "Caldwell",
"total_registered": 6450,
"total_voted": 3563,
"total_turnout_percentage": 55,
"total_registered_democrats": 2239,
"total_voted_democrats": 1303,
"total_turnout_percentage_democrats": 58,
"total_registered_republicans": 2565,
"total_voted_republicans": 1608,
"total_turnout_percentage_republicans": 63,
"total_registered_other": 1646,
"total_voted_other": 652,
"total_turnout_percentage_other": 40
},
{
"parish_name": "Cameron",
"total_registered": 5298,
"total_voted": 2549,
"total_turnout_percentage": 48,
"total_registered_democrats": 1934,
"total_voted_democrats": 1029,
"total_turnout_percentage_democrats": 53,
"total_registered_republicans": 1893,
"total_voted_republicans": 1050,
"total_turnout_percentage_republicans": 55,
"total_registered_other": 1471,
"total_voted_other": 470,
"total_turnout_percentage_other": 32
},
{
"parish_name": "Catahoula",
"total_registered": 6796,
"total_voted": 4394,
"total_turnout_percentage": 65,
"total_registered_democrats": 3224,
"total_voted_democrats": 2118,
"total_turnout_percentage_democrats": 66,
"total_registered_republicans": 2137,
"total_voted_republicans": 1540,
"total_turnout_percentage_republicans": 72,
"total_registered_other": 1435,
"total_voted_other": 736,
"total_turnout_percentage_other": 51
},
{
"parish_name": "Claiborne",
"total_registered": 9056,
"total_voted": 5700,
"total_turnout_percentage": 63,
"total_registered_democrats": 4144,
"total_voted_democrats": 2589,
"total_turnout_percentage_democrats": 62,
"total_registered_republicans": 2830,
"total_voted_republicans": 2084,
"total_turnout_percentage_republicans": 74,
"total_registered_other": 2082,
"total_voted_other": 1027,
"total_turnout_percentage_other": 49
},
{
"parish_name": "Concordia",
"total_registered": 12948,
"total_voted": 6744,
"total_turnout_percentage": 52,
"total_registered_democrats": 6156,
"total_voted_democrats": 3406,
"total_turnout_percentage_democrats": 55,
"total_registered_republicans": 3906,
"total_voted_republicans": 2260,
"total_turnout_percentage_republicans": 58,
"total_registered_other": 2886,
"total_voted_other": 1078,
"total_turnout_percentage_other": 37
},
{
"parish_name": "DeSoto",
"total_registered": 19409,
"total_voted": 10658,
"total_turnout_percentage": 55,
"total_registered_democrats": 8614,
"total_voted_democrats": 5006,
"total_turnout_percentage_democrats": 58,
"total_registered_republicans": 6353,
"total_voted_republicans": 3847,
"total_turnout_percentage_republicans": 61,
"total_registered_other": 4442,
"total_voted_other": 1805,
"total_turnout_percentage_other": 41
},
{
"parish_name": "East Baton Rouge",
"total_registered": 288090,
"total_voted": 158107,
"total_turnout_percentage": 55,
"total_registered_democrats": 135806,
"total_voted_democrats": 80811,
"total_turnout_percentage_democrats": 60,
"total_registered_republicans": 79483,
"total_voted_republicans": 48153,
"total_turnout_percentage_republicans": 61,
"total_registered_other": 72801,
"total_voted_other": 29143,
"total_turnout_percentage_other": 40
},
{
"parish_name": "East Carroll",
"total_registered": 5122,
"total_voted": 2777,
"total_turnout_percentage": 54,
"total_registered_democrats": 3434,
"total_voted_democrats": 1891,
"total_turnout_percentage_democrats": 55,
"total_registered_republicans": 765,
"total_voted_republicans": 547,
"total_turnout_percentage_republicans": 72,
"total_registered_other": 923,
"total_voted_other": 339,
"total_turnout_percentage_other": 37
},
{
"parish_name": "East Feliciana",
"total_registered": 14154,
"total_voted": 8394,
"total_turnout_percentage": 59,
"total_registered_democrats": 6784,
"total_voted_democrats": 4288,
"total_turnout_percentage_democrats": 63,
"total_registered_republicans": 4213,
"total_voted_republicans": 2735,
"total_turnout_percentage_republicans": 65,
"total_registered_other": 3157,
"total_voted_other": 1371,
"total_turnout_percentage_other": 43
},
{
"parish_name": "Evangeline",
"total_registered": 21727,
"total_voted": 12377,
"total_turnout_percentage": 57,
"total_registered_democrats": 11151,
"total_voted_democrats": 6763,
"total_turnout_percentage_democrats": 61,
"total_registered_republicans": 5956,
"total_voted_republicans": 3766,
"total_turnout_percentage_republicans": 63,
"total_registered_other": 4620,
"total_voted_other": 1848,
"total_turnout_percentage_other": 40
},
{
"parish_name": "Franklin",
"total_registered": 13765,
"total_voted": 7644,
"total_turnout_percentage": 56,
"total_registered_democrats": 5854,
"total_voted_democrats": 3191,
"total_turnout_percentage_democrats": 55,
"total_registered_republicans": 5048,
"total_voted_republicans": 3326,
"total_turnout_percentage_republicans": 66,
"total_registered_other": 2863,
"total_voted_other": 1127,
"total_turnout_percentage_other": 39
},
{
"parish_name": "Grant",
"total_registered": 12890,
"total_voted": 6401,
"total_turnout_percentage": 50,
"total_registered_democrats": 3880,
"total_voted_democrats": 1996,
"total_turnout_percentage_democrats": 51,
"total_registered_republicans": 5285,
"total_voted_republicans": 3080,
"total_turnout_percentage_republicans": 58,
"total_registered_other": 3725,
"total_voted_other": 1325,
"total_turnout_percentage_other": 36
},
{
"parish_name": "Iberia",
"total_registered": 46889,
"total_voted": 24115,
"total_turnout_percentage": 51,
"total_registered_democrats": 19782,
"total_voted_democrats": 10580,
"total_turnout_percentage_democrats": 53,
"total_registered_republicans": 14758,
"total_voted_republicans": 9463,
"total_turnout_percentage_republicans": 64,
"total_registered_other": 12349,
"total_voted_other": 4072,
"total_turnout_percentage_other": 33
},
{
"parish_name": "Iberville",
"total_registered": 21577,
"total_voted": 13186,
"total_turnout_percentage": 61,
"total_registered_democrats": 13495,
"total_voted_democrats": 8834,
"total_turnout_percentage_democrats": 65,
"total_registered_republicans": 3916,
"total_voted_republicans": 2516,
"total_turnout_percentage_republicans": 64,
"total_registered_other": 4166,
"total_voted_other": 1836,
"total_turnout_percentage_other": 44
},
{
"parish_name": "Jackson",
"total_registered": 9756,
"total_voted": 5702,
"total_turnout_percentage": 58,
"total_registered_democrats": 4061,
"total_voted_democrats": 2493,
"total_turnout_percentage_democrats": 61,
"total_registered_republicans": 3580,
"total_voted_republicans": 2354,
"total_turnout_percentage_republicans": 66,
"total_registered_other": 2115,
"total_voted_other": 855,
"total_turnout_percentage_other": 40
},
{
"parish_name": "Jefferson",
"total_registered": 270357,
"total_voted": 127498,
"total_turnout_percentage": 47,
"total_registered_democrats": 107124,
"total_voted_democrats": 55341,
"total_turnout_percentage_democrats": 52,
"total_registered_republicans": 82829,
"total_voted_republicans": 45778,
"total_turnout_percentage_republicans": 55,
"total_registered_other": 80404,
"total_voted_other": 26379,
"total_turnout_percentage_other": 33
},
{
"parish_name": "Jefferson Davis",
"total_registered": 20785,
"total_voted": 9886,
"total_turnout_percentage": 48,
"total_registered_democrats": 8254,
"total_voted_democrats": 4302,
"total_turnout_percentage_democrats": 52,
"total_registered_republicans": 6554,
"total_voted_republicans": 3647,
"total_turnout_percentage_republicans": 56,
"total_registered_other": 5977,
"total_voted_other": 1937,
"total_turnout_percentage_other": 32
},
{
"parish_name": "Lafayette",
"total_registered": 153705,
"total_voted": 78628,
"total_turnout_percentage": 51,
"total_registered_democrats": 50948,
"total_voted_democrats": 27665,
"total_turnout_percentage_democrats": 54,
"total_registered_republicans": 58959,
"total_voted_republicans": 34791,
"total_turnout_percentage_republicans": 59,
"total_registered_other": 43798,
"total_voted_other": 16172,
"total_turnout_percentage_other": 37
},
{
"parish_name": "Lafourche",
"total_registered": 58668,
"total_voted": 29972,
"total_turnout_percentage": 51,
"total_registered_democrats": 22953,
"total_voted_democrats": 12619,
"total_turnout_percentage_democrats": 55,
"total_registered_republicans": 19315,
"total_voted_republicans": 11446,
"total_turnout_percentage_republicans": 59,
"total_registered_other": 16400,
"total_voted_other": 5907,
"total_turnout_percentage_other": 36
},
{
"parish_name": "LaSalle",
"total_registered": 8965,
"total_voted": 6015,
"total_turnout_percentage": 67,
"total_registered_democrats": 2736,
"total_voted_democrats": 1760,
"total_turnout_percentage_democrats": 64,
"total_registered_republicans": 4186,
"total_voted_republicans": 3173,
"total_turnout_percentage_republicans": 76,
"total_registered_other": 2043,
"total_voted_other": 1082,
"total_turnout_percentage_other": 53
},
{
"parish_name": "Lincoln",
"total_registered": 26604,
"total_voted": 13335,
"total_turnout_percentage": 50,
"total_registered_democrats": 10307,
"total_voted_democrats": 5331,
"total_turnout_percentage_democrats": 52,
"total_registered_republicans": 9485,
"total_voted_republicans": 5617,
"total_turnout_percentage_republicans": 59,
"total_registered_other": 6812,
"total_voted_other": 2387,
"total_turnout_percentage_other": 35
},
{
"parish_name": "Livingston",
"total_registered": 82313,
"total_voted": 39984,
"total_turnout_percentage": 49,
"total_registered_democrats": 19924,
"total_voted_democrats": 10587,
"total_turnout_percentage_democrats": 53,
"total_registered_republicans": 37999,
"total_voted_republicans": 21113,
"total_turnout_percentage_republicans": 56,
"total_registered_other": 24390,
"total_voted_other": 8284,
"total_turnout_percentage_other": 34
},
{
"parish_name": "Madison",
"total_registered": 7591,
"total_voted": 4034,
"total_turnout_percentage": 53,
"total_registered_democrats": 4356,
"total_voted_democrats": 2377,
"total_turnout_percentage_democrats": 55,
"total_registered_republicans": 1502,
"total_voted_republicans": 980,
"total_turnout_percentage_republicans": 65,
"total_registered_other": 1733,
"total_voted_other": 677,
"total_turnout_percentage_other": 39
},
{
"parish_name": "Morehouse",
"total_registered": 18155,
"total_voted": 8572,
"total_turnout_percentage": 47,
"total_registered_democrats": 8843,
"total_voted_democrats": 4430,
"total_turnout_percentage_democrats": 50,
"total_registered_republicans": 5180,
"total_voted_republicans": 2891,
"total_turnout_percentage_republicans": 56,
"total_registered_other": 4132,
"total_voted_other": 1251,
"total_turnout_percentage_other": 30
},
{
"parish_name": "Natchitoches",
"total_registered": 24461,
"total_voted": 12441,
"total_turnout_percentage": 51,
"total_registered_democrats": 11414,
"total_voted_democrats": 6081,
"total_turnout_percentage_democrats": 53,
"total_registered_republicans": 6773,
"total_voted_republicans": 4156,
"total_turnout_percentage_republicans": 61,
"total_registered_other": 6274,
"total_voted_other": 2204,
"total_turnout_percentage_other": 35
},
{
"parish_name": "Orleans",
"total_registered": 259669,
"total_voted": 128611,
"total_turnout_percentage": 50,
"total_registered_democrats": 164890,
"total_voted_democrats": 90138,
"total_turnout_percentage_democrats": 55,
"total_registered_republicans": 26997,
"total_voted_republicans": 13537,
"total_turnout_percentage_republicans": 50,
"total_registered_other": 67782,
"total_voted_other": 24936,
"total_turnout_percentage_other": 37
},
{
"parish_name": "Ouachita",
"total_registered": 102449,
"total_voted": 50988,
"total_turnout_percentage": 50,
"total_registered_democrats": 39495,
"total_voted_democrats": 20517,
"total_turnout_percentage_democrats": 52,
"total_registered_republicans": 36774,
"total_voted_republicans": 21449,
"total_turnout_percentage_republicans": 58,
"total_registered_other": 26180,
"total_voted_other": 9022,
"total_turnout_percentage_other": 34
},
{
"parish_name": "Plaquemines",
"total_registered": 14668,
"total_voted": 7261,
"total_turnout_percentage": 50,
"total_registered_democrats": 5732,
"total_voted_democrats": 3133,
"total_turnout_percentage_democrats": 55,
"total_registered_republicans": 4971,
"total_voted_republicans": 2765,
"total_turnout_percentage_republicans": 56,
"total_registered_other": 3965,
"total_voted_other": 1363,
"total_turnout_percentage_other": 34
},
{
"parish_name": "Pointe Coupee",
"total_registered": 15865,
"total_voted": 10051,
"total_turnout_percentage": 63,
"total_registered_democrats": 8761,
"total_voted_democrats": 6033,
"total_turnout_percentage_democrats": 69,
"total_registered_republicans": 3702,
"total_voted_republicans": 2387,
"total_turnout_percentage_republicans": 64,
"total_registered_other": 3402,
"total_voted_other": 1631,
"total_turnout_percentage_other": 48
},
{
"parish_name": "Rapides",
"total_registered": 83779,
"total_voted": 43783,
"total_turnout_percentage": 52,
"total_registered_democrats": 33430,
"total_voted_democrats": 18433,
"total_turnout_percentage_democrats": 55,
"total_registered_republicans": 28479,
"total_voted_republicans": 17344,
"total_turnout_percentage_republicans": 61,
"total_registered_other": 21870,
"total_voted_other": 8006,
"total_turnout_percentage_other": 37
},
{
"parish_name": "Red River",
"total_registered": 5971,
"total_voted": 3615,
"total_turnout_percentage": 61,
"total_registered_democrats": 3094,
"total_voted_democrats": 1971,
"total_turnout_percentage_democrats": 64,
"total_registered_republicans": 1717,
"total_voted_republicans": 1137,
"total_turnout_percentage_republicans": 66,
"total_registered_other": 1160,
"total_voted_other": 507,
"total_turnout_percentage_other": 44
},
{
"parish_name": "Richland",
"total_registered": 14151,
"total_voted": 7490,
"total_turnout_percentage": 53,
"total_registered_democrats": 5810,
"total_voted_democrats": 3286,
"total_turnout_percentage_democrats": 57,
"total_registered_republicans": 5029,
"total_voted_republicans": 2987,
"total_turnout_percentage_republicans": 59,
"total_registered_other": 3312,
"total_voted_other": 1217,
"total_turnout_percentage_other": 37
},
{
"parish_name": "Sabine",
"total_registered": 14743,
"total_voted": 7981,
"total_turnout_percentage": 54,
"total_registered_democrats": 5504,
"total_voted_democrats": 2907,
"total_turnout_percentage_democrats": 53,
"total_registered_republicans": 5644,
"total_voted_republicans": 3646,
"total_turnout_percentage_republicans": 65,
"total_registered_other": 3595,
"total_voted_other": 1428,
"total_turnout_percentage_other": 40
},
{
"parish_name": "St. Bernard",
"total_registered": 25889,
"total_voted": 10348,
"total_turnout_percentage": 40,
"total_registered_democrats": 11147,
"total_voted_democrats": 4979,
"total_turnout_percentage_democrats": 45,
"total_registered_republicans": 5992,
"total_voted_republicans": 2778,
"total_turnout_percentage_republicans": 46,
"total_registered_other": 8750,
"total_voted_other": 2591,
"total_turnout_percentage_other": 30
},
{
"parish_name": "St. Charles",
"total_registered": 35324,
"total_voted": 18600,
"total_turnout_percentage": 53,
"total_registered_democrats": 13372,
"total_voted_democrats": 8111,
"total_turnout_percentage_democrats": 61,
"total_registered_republicans": 12461,
"total_voted_republicans": 7001,
"total_turnout_percentage_republicans": 56,
"total_registered_other": 9491,
"total_voted_other": 3488,
"total_turnout_percentage_other": 37
},
{
"parish_name": "St. Helena",
"total_registered": 8544,
"total_voted": 5307,
"total_turnout_percentage": 62,
"total_registered_democrats": 5500,
"total_voted_democrats": 3631,
"total_turnout_percentage_democrats": 66,
"total_registered_republicans": 1616,
"total_voted_republicans": 1050,
"total_turnout_percentage_republicans": 65,
"total_registered_other": 1428,
"total_voted_other": 626,
"total_turnout_percentage_other": 44
},
{
"parish_name": "St. James",
"total_registered": 15526,
"total_voted": 9791,
"total_turnout_percentage": 63,
"total_registered_democrats": 10386,
"total_voted_democrats": 7131,
"total_turnout_percentage_democrats": 69,
"total_registered_republicans": 2602,
"total_voted_republicans": 1594,
"total_turnout_percentage_republicans": 61,
"total_registered_other": 2538,
"total_voted_other": 1066,
"total_turnout_percentage_other": 42
},
{
"parish_name": "St. John",
"total_registered": 29937,
"total_voted": 15409,
"total_turnout_percentage": 51,
"total_registered_democrats": 18291,
"total_voted_democrats": 10609,
"total_turnout_percentage_democrats": 58,
"total_registered_republicans": 4768,
"total_voted_republicans": 2533,
"total_turnout_percentage_republicans": 53,
"total_registered_other": 6878,
"total_voted_other": 2267,
"total_turnout_percentage_other": 33
},
{
"parish_name": "St. Landry",
"total_registered": 59325,
"total_voted": 30530,
"total_turnout_percentage": 51,
"total_registered_democrats": 31900,
"total_voted_democrats": 17578,
"total_turnout_percentage_democrats": 55,
"total_registered_republicans": 13857,
"total_voted_republicans": 8296,
"total_turnout_percentage_republicans": 60,
"total_registered_other": 13568,
"total_voted_other": 4656,
"total_turnout_percentage_other": 34
},
{
"parish_name": "St. Martin",
"total_registered": 37185,
"total_voted": 20160,
"total_turnout_percentage": 54,
"total_registered_democrats": 16891,
"total_voted_democrats": 9594,
"total_turnout_percentage_democrats": 57,
"total_registered_republicans": 11157,
"total_voted_republicans": 7227,
"total_turnout_percentage_republicans": 65,
"total_registered_other": 9137,
"total_voted_other": 3339,
"total_turnout_percentage_other": 37
},
{
"parish_name": "St. Mary",
"total_registered": 32865,
"total_voted": 16402,
"total_turnout_percentage": 50,
"total_registered_democrats": 13837,
"total_voted_democrats": 7601,
"total_turnout_percentage_democrats": 55,
"total_registered_republicans": 9585,
"total_voted_republicans": 5698,
"total_turnout_percentage_republicans": 59,
"total_registered_other": 9443,
"total_voted_other": 3103,
"total_turnout_percentage_other": 33
},
{
"parish_name": "St. Tammany",
"total_registered": 176142,
"total_voted": 91302,
"total_turnout_percentage": 52,
"total_registered_democrats": 41164,
"total_voted_democrats": 22806,
"total_turnout_percentage_democrats": 55,
"total_registered_republicans": 82654,
"total_voted_republicans": 48420,
"total_turnout_percentage_republicans": 59,
"total_registered_other": 52324,
"total_voted_other": 20076,
"total_turnout_percentage_other": 38
},
{
"parish_name": "Tangipahoa",
"total_registered": 79937,
"total_voted": 39252,
"total_turnout_percentage": 49,
"total_registered_democrats": 30978,
"total_voted_democrats": 16866,
"total_turnout_percentage_democrats": 54,
"total_registered_republicans": 26185,
"total_voted_republicans": 14620,
"total_turnout_percentage_republicans": 56,
"total_registered_other": 22774,
"total_voted_other": 7766,
"total_turnout_percentage_other": 34
},
{
"parish_name": "Tensas",
"total_registered": 3555,
"total_voted": 2107,
"total_turnout_percentage": 59,
"total_registered_democrats": 2217,
"total_voted_democrats": 1353,
"total_turnout_percentage_democrats": 61,
"total_registered_republicans": 828,
"total_voted_republicans": 546,
"total_turnout_percentage_republicans": 66,
"total_registered_other": 510,
"total_voted_other": 208,
"total_turnout_percentage_other": 41
},
{
"parish_name": "Terrebonne",
"total_registered": 63426,
"total_voted": 30509,
"total_turnout_percentage": 48,
"total_registered_democrats": 20788,
"total_voted_democrats": 10808,
"total_turnout_percentage_democrats": 52,
"total_registered_republicans": 23056,
"total_voted_republicans": 13445,
"total_turnout_percentage_republicans": 58,
"total_registered_other": 19582,
"total_voted_other": 6256,
"total_turnout_percentage_other": 32
},
{
"parish_name": "Union",
"total_registered": 15551,
"total_voted": 8043,
"total_turnout_percentage": 52,
"total_registered_democrats": 5827,
"total_voted_democrats": 3059,
"total_turnout_percentage_democrats": 52,
"total_registered_republicans": 6142,
"total_voted_republicans": 3761,
"total_turnout_percentage_republicans": 61,
"total_registered_other": 3582,
"total_voted_other": 1223,
"total_turnout_percentage_other": 34
},
{
"parish_name": "Vermilion",
"total_registered": 37608,
"total_voted": 18889,
"total_turnout_percentage": 50,
"total_registered_democrats": 15298,
"total_voted_democrats": 8084,
"total_turnout_percentage_democrats": 53,
"total_registered_republicans": 12019,
"total_voted_republicans": 7266,
"total_turnout_percentage_republicans": 60,
"total_registered_other": 10291,
"total_voted_other": 3539,
"total_turnout_percentage_other": 34
},
{
"parish_name": "Vernon",
"total_registered": 24693,
"total_voted": 11121,
"total_turnout_percentage": 45,
"total_registered_democrats": 7650,
"total_voted_democrats": 3580,
"total_turnout_percentage_democrats": 47,
"total_registered_republicans": 9251,
"total_voted_republicans": 5107,
"total_turnout_percentage_republicans": 55,
"total_registered_other": 7792,
"total_voted_other": 2434,
"total_turnout_percentage_other": 31
},
{
"parish_name": "Washington",
"total_registered": 27853,
"total_voted": 12978,
"total_turnout_percentage": 47,
"total_registered_democrats": 12789,
"total_voted_democrats": 6412,
"total_turnout_percentage_democrats": 50,
"total_registered_republicans": 8520,
"total_voted_republicans": 4534,
"total_turnout_percentage_republicans": 53,
"total_registered_other": 6544,
"total_voted_other": 2032,
"total_turnout_percentage_other": 31
},
{
"parish_name": "Webster",
"total_registered": 24505,
"total_voted": 13551,
"total_turnout_percentage": 55,
"total_registered_democrats": 10097,
"total_voted_democrats": 5958,
"total_turnout_percentage_democrats": 59,
"total_registered_republicans": 8398,
"total_voted_republicans": 5196,
"total_turnout_percentage_republicans": 62,
"total_registered_other": 6010,
"total_voted_other": 2397,
"total_turnout_percentage_other": 40
},
{
"parish_name": "West Baton Rouge",
"total_registered": 17120,
"total_voted": 11387,
"total_turnout_percentage": 67,
"total_registered_democrats": 8515,
"total_voted_democrats": 6141,
"total_turnout_percentage_democrats": 72,
"total_registered_republicans": 4453,
"total_voted_republicans": 3123,
"total_turnout_percentage_republicans": 70,
"total_registered_other": 4152,
"total_voted_other": 2123,
"total_turnout_percentage_other": 51
},
{
"parish_name": "West Carroll",
"total_registered": 7229,
"total_voted": 4200,
"total_turnout_percentage": 58,
"total_registered_democrats": 2393,
"total_voted_democrats": 1431,
"total_turnout_percentage_democrats": 60,
"total_registered_republicans": 3061,
"total_voted_republicans": 1962,
"total_turnout_percentage_republicans": 64,
"total_registered_other": 1775,
"total_voted_other": 807,
"total_turnout_percentage_other": 45
},
{
"parish_name": "West Feliciana",
"total_registered": 7782,
"total_voted": 4947,
"total_turnout_percentage": 64,
"total_registered_democrats": 3227,
"total_voted_democrats": 2245,
"total_turnout_percentage_democrats": 70,
"total_registered_republicans": 2808,
"total_voted_republicans": 1828,
"total_turnout_percentage_republicans": 65,
"total_registered_other": 1747,
"total_voted_other": 874,
"total_turnout_percentage_other": 50
},
{
"parish_name": "Winn",
"total_registered": 8842,
"total_voted": 4412,
"total_turnout_percentage": 50,
"total_registered_democrats": 3666,
"total_voted_democrats": 1863,
"total_turnout_percentage_democrats": 51,
"total_registered_republicans": 2797,
"total_voted_republicans": 1722,
"total_turnout_percentage_republicans": 62,
"total_registered_other": 2379,
"total_voted_other": 827,
"total_turnout_percentage_other": 35
}
];
const voteTotals = turnoutStats.map(s => s['total_voted']).sort((a, b) => b - a)
const highestParishVoteTotal = voteTotals[0]
const lowestParishVoteTotal = voteTotals[voteTotals.length - 1]
const numColors = 5;
const colorScale = chroma
.scale(['red','blue'])
// .scale(['red','purple','blue'])
// .scale(['#e9002c', '#00429d'])
// .scale('RdBu')
// .mode('hcl')
// .mode('lab')
.colors(numColors, format='rgb');
// render color scale on the page
const colorScaleNode = document.getElementById("colorScale");
for (let j=0;j<colorScale.length;j++) {
for (let i=1;i<=100;i++) {
let span = document.createElement("span");
span.className = "grad-step";
span.style.backgroundColor = `rgba(${colorScale[j][0]}, ${colorScale[j][1]}, ${colorScale[j][2]}, ${i/100})`;
colorScaleNode.appendChild(span);
}
}
// rescale the value from [0, 1] (aka normalization)
const minMaxScale = function (value, min, max) {
const range = max - min;
const scalePoint = (value - min) / range;
return scalePoint.toFixed(2);
}
// map the scalePoint to one of the colors in the colorScale
const scalePointToColor = function (scalePoint) {
let maxIndex = numColors - 1;
let colorScaleIndex = Math.round(scalePoint * maxIndex)
let color = colorScale[colorScaleIndex];
return color;
}
// choose a color from the color scale based on the feature data
const getColor = function (feature) {
const stats = getParishStats(feature);
const parish = stats['parish_name'];
const totalParishVotes = stats['total_voted']
const dems = stats['total_voted_democrats'];
const reps = stats['total_voted_republicans'];
const all = dems + reps; // ignore other parties when calculating color :/
// do math so values align to color scale
let val = Math.max(dems, reps);
val = (reps > dems) ? all - val : val;
// rescale the value to [0, 1] range
const colorScalePoint = minMaxScale(val, 0, all);
const color = scalePointToColor(colorScalePoint);
// alpha should be [minAlpha, 1] from lowest to highest turnout
const minAlpha = 0.01;
const alphaScalePoint = minMaxScale(totalParishVotes, lowestParishVoteTotal, highestParishVoteTotal);
let alphaScale = parseFloat(alphaScalePoint) + minAlpha;
if (alphaScale < minAlpha) {
console.log(`not many votes in ${parish}`, alphaScale)
alphaScale = minAlpha;
}
// alphaScale = 1
// console.log(parish, `all=${all} dems=${dems} reps=${reps}`, `${(dems > reps) ? 'dems won' : 'reps won'}`, val, colorScalePoint, color, alphaScale);
return [...color, alphaScale]
}
const computeBaseStyle = function (feature) {
const color = getColor(feature);
return new ol.style.Style({
stroke: new ol.style.Stroke({
color: [0, 0 ,0, 0.1],
width: 1
}),
fill: new ol.style.Fill({
color: color
}),
});
}
const parishBoundaries = new ol.source.Vector({
url: "https://raw.githubusercontent.com/TheLens/geographic-data/master/exports/topojson/parishes/parishes-simplified.json",
format: new ol.format.TopoJSON({
layers: ["parishes-fullsize"]
})
});
const map = new ol.Map({
target: "map",
controls: ol.control.defaults({
attribution: false,
zoom: false,
rotate: false
}),
interactions: ol.interaction.defaults({
doubleClickZoom: false,
dragAndDrop: false,
dragPan: false,
keyboardPan: false,
keyboardZoom: false,
mouseWheelZoom: false,
pointer: false,
select: false
}),
view: new ol.View({
center: ol.proj.fromLonLat([-91.89, 31.01]),
zoom: 7
}),
layers: [
new ol.layer.Vector({
source: parishBoundaries,
style: computeBaseStyle
})
],
});
const getParishStats = function (feature) {
const stats = turnoutStats.filter(s => {
// todo: normalize names in another function
if (feature.get('parishname') == "Jefferson Davis"){
return s['parish_name'] == "Jefferson Davis";
}
else {
// ensure st.john matches st.johnthebaptist
// and "La Salle" matches "LaSalle
return feature.get('parishname').replace(/\s+/g, '').toLowerCase()
.startsWith(s['parish_name'].replace(/\s+/g, '').toLowerCase());
}
});
return stats.length > 0 ? stats[0] : null;
}
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment