Skip to content

Instantly share code, notes, and snippets.

@malcolm-decuire
Last active March 14, 2016 22:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save malcolm-decuire/50886cd6ce3537b18638 to your computer and use it in GitHub Desktop.
Save malcolm-decuire/50886cd6ce3537b18638 to your computer and use it in GitHub Desktop.
McCann Style Map: USA 1860 CENSUS

Built with blockbuilder.org

Viewable on desktop & mobile

Synopsis: According to the 1860 USA Census there were less than 15 states of the 30 states in the Union that allowed the ownership of African-Americans.

Blue states had an enslave ratio of more than 0.13.

Gray states had a enslaved ratio of less than 0.

Black states are undefined for now.

Sources: Aggregated Data http://www.civil-war.net/pages/1860_census.html

Raw Data https://www.nhgis.org/user-resources/data-availability#table-data

McCann Style Map: https://gist.github.com/xboard/e974aee21edf4f1c5054

Curran Kelleher aka D3 Boss https://github.com/curran for helping me build out clean functions (D3 Boss)

State TotalPopulation TotalSlaves Families FreePopulation TotalSlaveHolders SlaveHolder Ratio SlavesRatio
AL 964,201.00 435,080.00 96,603.00 529,121.00 33,730.00 0.35 0.45
AR 435,450.00 111,115.00 57,244.00 324,335.00 11,481.00 0.20 0.26
CA 379,985.00 0.00 98,767.00 379,994.00 0.00 0.00 0.00
CT 460,138.00 0.00 94,831.00 460,147.00 0.00 0.00 0.00
DE 112,216.00 1,798.00 18,966.00 110,418.00 587.00 0.03 0.02
FL 140,424.00 61,745.00 15,090.00 78,679.00 5,152.00 0.34 0.44
GA 1,057,286.00 462,198.00 109,919.00 595,088.00 41,084.00 0.37 0.44
IN 1,711,942.00 0.00 315,539.00 1,711,951.00 0.00 0.00 0.00
ID 1,350,419.00 0.00 248,664.00 1,350,428.00 0.00 0.00 0.00
IA 674,904.00 0.00 124,098.00 674,913.00 0.00 0.00 0.00
KS 107,206.00 2.00 21,912.00 107,204.00 2.00 0.00 0.00
KY 1,155,684.00 225,483.00 166,321.00 930,201.00 38,645.00 0.23 0.20
LA 708,002.00 331,726.00 74,725.00 376,276.00 22,033.00 0.29 0.47
ME 628,270.00 0.00 120,863.00 628,279.00 0.00 0.00 0.00
MD 687,049.00 87,189.00 110,278.00 599,860.00 13,783.00 0.12 0.13
MA 1,231,057.00 0.00 251,287.00 1,231,066.00 0.00 0.00 0.00
MI 749,104.00 0.00 144,761.00 749,113.00 0.00 0.00 0.00
MN 172,014.00 0.00 37,319.00 172,023.00 0.00 0.00 0.00
MS 791,305.00 436,631.00 63,015.00 354,674.00 30,943.00 0.49 0.55
MO 1,182,012.00 114,931.00 192,073.00 1,067,081.00 24,320.00 0.13 0.10
NE 28,841.00 15.00 5,931.00 28,826.00 6.00 0.00 0.00
NV 6,848.00 0.00 2,027.00 6,857.00 0.00 0.00 0.00
NH 326,064.00 0.00 69,018.00 326,073.00 0.00 0.00 0.00
NJ 672,035.00 0.00 130,348.00 672,017.00 0.00 0.00 0.00
NY 3,880,726.00 0.00 758,420.00 3,880,735.00 0.00 0.00 0.00
NC 992,622.00 331,059.00 125,090.00 661,563.00 34,658.00 0.28 0.33
OH 2,339,502.00 0.00 434,134.00 2,339,511.00 0.00 0.00 0.00
OR 52,456.00 0.00 11,063.00 52,465.00 0.00 0.00 0.00
PA 2,906,206.00 0.00 524,558.00 2,906,215.00 0.00 0.00 0.00
RI 174,611.00 0.00 35,209.00 174,620.00 0.00 0.00 0.00
SC 703,708.00 402,406.00 58,642.00 301,302.00 26,701.00 0.46 0.57
TN 1,109,801.00 275,719.00 149,335.00 834,082.00 36,844.00 0.25 0.25
TX 604,215.00 182,566.00 76,781.00 421,649.00 21,878.00 0.28 0.30
VT 315,089.00 0.00 63,781.00 315,098.00 0.00 0.00 0.00
VA 1,596,318.00 490,865.00 201,523.00 1,105,453.00 52,128.00 0.26 0.31
WI 775,872.00 0.00 147,473.00 775,881.00 0.00 0.00 0.00
WV 775,872.00 0.00 147,473.00 775,881.00 0.00 0.00 0.00
<html>
<head>
<meta charset="utf-8">
<!-- Load the d3 library. -->
<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
<script src="http://labratrevenge.com/d3-tip/javascripts/d3.tip.v0.6.3.js"></script>
<link href='http://fonts.googleapis.com/css?family=Open+Sans' rel='stylesheet' type='text/css'>
<style>
body { font-family: "Open Sans"; }
text.stateID { dominant-baseline: middle; text-anchor: middle; }
.d3-tip {
line-height: 1;
font-weight: bold;
padding: 12px;
background: rgba(0, 0, 0, 0.8);
color: #fff;
border-radius: 2px;
}
/* Creates a small triangle extender for the tooltip */
.d3-tip:after {
box-sizing: border-box;
display: inline;
font-size: 10px;
width: 100%;
line-height: 1;
color: rgba(0, 0, 0, 0.8);
content: "\25BC";
position: absolute;
text-align: center;
}
/* Style northward tooltips differently */
.d3-tip.n:after {
margin: -1px 0 0 0;
top: 100%;
left: 0;
}
</style>
</head>
<body>
<h3>USA 1860 CENSUS: Ratio of African Americans In Bondage.</h3>
<div id="plot"></div>
<script>
var stateGrid = {
"ME" : { "state": "ME", "row": 0, "col": 10 },
"WI" : { "state": "WI", "row": 1, "col": 5 },
"VT" : { "state": "VT", "row": 1, "col": 9 },
"NH" : { "state": "NH", "row": 1, "col": 10 },
"WA" : { "state": "WA", "row": 2, "col": 0 },
"ID" : { "state": "ID", "row": 2, "col": 1 },
"MT" : { "state": "MT", "row": 2, "col": 2 },
"ND" : { "state": "ND", "row": 2, "col": 3 },
"MN" : { "state": "MN", "row": 2, "col": 4 },
"IL" : { "state": "IL", "row": 2, "col": 5 },
"MI" : { "state": "MI", "row": 2, "col": 6 },
"NY" : { "state": "NY", "row": 2, "col": 8 },
"MA" : { "state": "MA", "row": 2, "col": 9 },
"OR" : { "state": "OR", "row": 3, "col": 0 },
"NV" : { "state": "NV", "row": 3, "col": 1 },
"WY" : { "state": "WY", "row": 3, "col": 2 },
"SD" : { "state": "SD", "row": 3, "col": 3 },
"IA" : { "state": "IA", "row": 3, "col": 4 },
"IN" : { "state": "IN", "row": 3, "col": 5 },
"OH" : { "state": "OH", "row": 3, "col": 6 },
"PA" : { "state": "PA", "row": 3, "col": 7 },
"NJ" : { "state": "NJ", "row": 3, "col": 8 },
"CT" : { "state": "CT", "row": 3, "col": 9 },
"RI" : { "state": "RI", "row": 3, "col": 10 },
"CA" : { "state": "CA", "row": 4, "col": 0 },
"UT" : { "state": "UT", "row": 4, "col": 1 },
"CO" : { "state": "CO", "row": 4, "col": 2 },
"NE" : { "state": "NE", "row": 4, "col": 3 },
"MO" : { "state": "MO", "row": 4, "col": 4 },
"KY" : { "state": "KY", "row": 4, "col": 5 },
"WV" : { "state": "WV", "row": 4, "col": 6 },
"VA" : { "state": "VA", "row": 4, "col": 7 },
"MD" : { "state": "MD", "row": 4, "col": 8 },
"DE" : { "state": "DE", "row": 4, "col": 9 },
"AZ" : { "state": "AZ", "row": 5, "col": 1 },
"NM" : { "state": "NM", "row": 5, "col": 2 },
"KS" : { "state": "KS", "row": 5, "col": 3 },
"AR" : { "state": "AR", "row": 5, "col": 4 },
"TN" : { "state": "TN", "row": 5, "col": 5 },
"NC" : { "state": "NC", "row": 5, "col": 6 },
"SC" : { "state": "SC", "row": 5, "col": 7 },
"OK" : { "state": "OK", "row": 6, "col": 3 },
"LA" : { "state": "LA", "row": 6, "col": 4 },
"MS" : { "state": "MS", "row": 6, "col": 5 },
"AL" : { "state": "AL", "row": 6, "col": 6 },
"GA" : { "state": "GA", "row": 6, "col": 7 },
"HI" : { "state": "HI", "row": 7, "col": 0 },
"AK" : { "state": "AK", "row": 7, "col": 1 },
"TX" : { "state": "TX", "row": 7, "col": 3 },
"FL" : { "state": "FL", "row": 7, "col": 8 }
};
//first
var d3_info = {};
/////////////////////
/////////////////////
d3.tsv("dataX.tsv", function(error, tsv_data) {
if (error) throw error;
// second
tsv_data.forEach(function(d){
// This "if" is necessary because "KT" (and maybe others) in the TSV data
// but not in the state grid.
if(stateGrid[d.State]){
// Attach the data from the TSV file to the state grid objects.
stateGrid[d.State].SlavesRatio = parseNumber(d.SlavesRatio);
// You can copy and modify this line for each of the various fields.
// Example data inside "d":
// Families: "96,603.00"
// FreePopulation: "529,121.00"
// SlaveHolder Ratio: "0.35"
// SlavesRatio: "0.45"
// State: "AL"
// TotalPopulation: "964,201.00"
// TotalSlaveHolders: "33,730.00"
// TotalSlaves: "435,080.00"
}
});
render();
});
//third
// This function removes commas and parses the given string into a number.
function parseNumber(string){
return parseFloat(string.replace(/,/g, ""));
}
/////////////////////
/////////////////////
// must assign stateIDs the keys within the stateGrid object.
var stateIDs = Object.keys(stateGrid);
var xScale, yScale, xDomain, yDomain;
var height = 1200;
var width = 1200;
var svg = d3.select("#plot").append("svg")
.attr("height", height)
.attr("width", width);
var stateWidth = 50;
var gap = 3;
var tip = d3.tip()
.attr('class', 'd3-tip')
.offset([-10, 0])
.html(function(d) {
return "<strong>Slave Ratio:</strong> <span style='color:red'>" + stateGrid[d].SlavesRatio + "</span>";
})
var stateGroup = svg.append("g").attr("transform", "translate(50, 50)");
var stateXScale = d3.scale.linear()
.domain([0,11])
.range([0, 11 * (stateWidth + gap)]);
var stateYScale = d3.scale.linear()
.domain([0,7])
.range([0, 7 * (stateWidth + gap)]);
function render(){
var color =
d3.scale.linear()
//.category10()
//for (var i = 0; i < 10; i++){colors(i)}
//d3.extent
.domain(d3.extent(stateIDs.map(function (d){
if (stateGrid[d].SlavesRatio){return stateGrid[d].SlavesRatio;}
// else {return data(stateIDs);}
})))
.range(["gray", "blue"]);
var stateGroups = stateGroup
.selectAll("g").data(stateIDs)
.enter().append("g")
.on('mouseover', tip.show)
.on('mouseout', tip.hide)
.attr("transform", function (stateID) {
return "translate("
+ stateXScale(stateGrid[stateID].col) + ","
+ stateYScale(stateGrid[stateID].row)
+ ")";
});
var stateRects = stateGroups.append("rect")
.attr("width", stateWidth).attr("height", stateWidth)
.attr("fill", function (d){
return color(stateGrid[d].SlavesRatio);
})
svg.call(tip);
stateGroups.append("text")
.attr("class", "stateID")
.style("font-size", "x-small")
.style("pointer-events", "none")
.attr("x", stateWidth / 2)
.attr("y", stateWidth / 2)
.text(function (d) { return d; });
}
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment