Skip to content

Instantly share code, notes, and snippets.

@brandontlocke
Last active October 4, 2015 20:03
Show Gist options
  • Save brandontlocke/5363cf7f97f47366fc00 to your computer and use it in GitHub Desktop.
Save brandontlocke/5363cf7f97f47366fc00 to your computer and use it in GitHub Desktop.
year deaths
2001 11348
2002 11829
2003 11920
2004 11624
2005 12352
2006 12791
2007 12632
2008 12179
2009 11493
2010 11078
2011 11101
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Area Chart with Two Areas</title>
<script type="text/javascript" src="http://d3js.org/d3.v3.js"></script>
<style type="text/css">
body {
background-color: white;
font-family: Helvetica, Arial, sans-serif;
}
h1 {
font-size: 24px;
margin: 0;
}
p {
font-size: 14px;
margin: 10px 0 0 0;
}
svg {
background-color: white;
}
circle:hover {
fill: orange;
}
.axis path,
.axis line {
fill: none;
stroke: black;
shape-rendering: crispEdges;
}
.axis text {
font-family: sans-serif;
font-size: 11px;
}
</style>
</head>
<body>
<h1>Deaths caused by gun violence, terrorism in US</h1>
<p>Deaths caused by <strong style="color: green;">gun violence</strong> and <strong style="color: red;">terrorism</strong> in the United States, 2001-2011. Source: State Department/Micah Zenko, Justice Department via <a href="http://www.vox.com/2015/10/1/9437187/obama-guns-terrorism-deaths">Vox</a>, 2015.</p>
<script type="text/javascript">
//Dimensions and padding
var w = 1200;
var h = 900;
var padding = [ 20, 10, 50, 100 ]; //Top, right, bottom, left
//Set up date formatting and years
var dateFormat = d3.time.format("%Y");
//Set up scales
var xScale = d3.time.scale()
.range([ padding[3], w - padding[1] - padding[3] ]);
var yScale = d3.scale.linear()
.range([ padding[0], h - padding[2] ]);
//Configure axis generators
var xAxis = d3.svg.axis()
.scale(xScale)
.orient("bottom")
.ticks(15)
.tickFormat(function(d) {
return dateFormat(d);
});
var yAxis = d3.svg.axis()
.scale(yScale)
.orient("left");
//Configure area generator
var area = d3.svg.area()
.x(function(d) {
return xScale(dateFormat.parse(d.year));
})
.y0(h - padding[2])
.y1(function(d) {
return yScale(d.deaths);
});
//Create the empty SVG image
var svg = d3.select("body")
.append("svg")
.attr("width", w)
.attr("height", h);
//Load USA data
d3.csv("terrorism.csv", function(terrorismData) {
//Load China data
d3.csv("guns.csv", function(gunsData) {
//Create a new array that contains both the
//USA and China data, merged into one
var mergedData = gunsData.concat(terrorismData);
//console.log(mergedData);
//Use the newly merged data to determine the
//min and max values, for setting scale domains
xScale.domain([
d3.min(mergedData, function(d) {
return dateFormat.parse(d.year);
}),
d3.max(mergedData, function(d) {
return dateFormat.parse(d.year);
})
]);
yScale.domain([
d3.max(mergedData, function(d) {
return +d.deaths;
}),
0
]);
//Lines
//
// Note data is wrapped in another array, so all its
// values are bound to a single element (the line!)
//
svg.data([ gunsData ])
.append("path")
.attr("class", "area guns")
.attr("d", area)
.attr("fill", "green")
.attr("stroke", "none");
svg.data([ terrorismData ])
.append("path")
.attr("class", "area terrorism")
.attr("d", area)
.attr("fill", "red")
.attr("stroke", "none");
//Axes
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + (h - padding[2]) + ")")
.call(xAxis);
svg.append("g")
.attr("class", "y axis")
.attr("transform", "translate(" + (padding[3]) + ",0)")
.call(yAxis);
});
//End guns data load function
});
//End terrorism data load function
</script>
</body>
</html>
year deaths
2001 2689
2002 25
2003 35
2004 74
2005 56
2006 28
2007 19
2008 33
2009 9
2010 15
2011 17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment