Skip to content

Instantly share code, notes, and snippets.

@kirkhunter
Last active April 11, 2016 15:18
Show Gist options
  • Save kirkhunter/736026d06cc7090a3171b142e2c89649 to your computer and use it in GitHub Desktop.
Save kirkhunter/736026d06cc7090a3171b142e2c89649 to your computer and use it in GitHub Desktop.
National Day of Civic Hacking: Learning D3.js (part 1)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.12/d3.min.js"></script>
<style>
body {
font-family: futura;
}
h2.title {
color: black;
text-align: center;
}
.axis {
font-family: arial;
font-size: 0.8em;
}
text {
fill: black;
stroke: none;
}
.label {
font-size: 2em;
}
path {
fill: none;
stroke: black;
stroke-width: 2px;
}
.tick {
fill: none;
stroke: black;
}
.bar {
opacity: 0.9;
stroke: none;
fill: steelblue;
}
</style>
<script type="text/javascript">
// https://github.com/mbostock/d3/wiki/Time-Formatting
format = d3.time.format("%Y"); <!-- // variable ---------------------------------------------------->
function draw(data) {
"use strict";
debugger;
// set margins according to Mike Bostock's margin conventions
// http://bl.ocks.org/mbostock/3019563
var margin = {top: 25, right: 40, bottom: 100, left: 75};
// set height and width of chart
var width = 960 - margin.left - margin.right,
height = 500 - margin.top - margin.bottom;
var barPadding = 10;
// specify the radius of our circles and the
// column we want to plot
var field = 'Score_Differential'; <!-- // variable ---------------------------------------------------->
// Append the title for the graph
d3.select("body")
.append("h2")
.text("March Madness Median Score Differential") <!-- // variable ---------------------------------------------------->
.attr('class', 'title');
// append the SVG tag with height and width to accommodate for margins
var svg = d3.select("body")
.append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append('g')
.attr('class','chart')
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
// remove missing values
data = data.filter(function(d) {
return d[field];
});
// bind our data to svg rects for the bar plot
svg.selectAll(".bar")
.data(data)
.enter()
.append("rect")
.attr('class', 'bar')
// maximum points for diff
var max_y = d3.max(data, function(d) {
return +d[field];
});
// get min/max dates
var time_extent = d3.extent(data, function(d){
return format.parse(d['Season']);
});
// Create x-axis scale mapping dates -> pixels
var time_scale = d3.time.scale()
.range([0, width])
.domain(time_extent);
// Create y-axis scale mapping price -> pixels
var measure_scale = d3.scale.linear()
.range([height, 0])
.domain([0, max_y]);
// Create D3 axis object from time_scale for the x-axis
var time_axis = d3.svg.axis()
.scale(time_scale)
.tickFormat(d3.time.format("%Y")); <!-- // variable ---------------------------------------------------->
// Create D3 axis object from measure_scale for the y-axis
var measure_axis = d3.svg.axis()
.scale(measure_scale)
.orient("left");
// Append SVG to page corresponding to the D3 x-axis
svg.append('g')
.attr('class', 'x axis')
.attr('transform', "translate(0," + height + ")")
.call(time_axis);
// Append SVG to page corresponding to the D3 y-axis
svg.append('g')
.attr('class', 'y axis')
.call(measure_axis);
// add label to y-axis
var y_label = d3.select(".y.axis")
.append("text")
.attr('class', 'label')
.text("Points")
.style('font-size', '1.5em')
.attr("transform", "rotate(-90)");
// center y axis label
y_label.attr("x", -(height / 2)).attr('y', -40)
.style("text-anchor", "middle");
// based on the data bound to each svg rect,
// change its x, y, width, height accordingly
d3.selectAll('.bar')
.attr('x', function(d) {
return time_scale(format.parse(d['Season']));
})
.attr('width', function(d) {
return width / data.length - barPadding;
})
.attr('y', function(d) {
return measure_scale(+d[field]);
})
.attr('height', function(d) {
return height - measure_scale(+d[field]);
});
};
d3.csv("https://raw.githubusercontent.com/KirkHunter/KirkHunter.github.io/master/tourney_data.csv", draw);
</script>
</head>
<body>
<script type="text/javascript">
// load our data file asynchronously and pass the data
// to the draw function once it is loaded.
// d3.csv("https://raw.githubusercontent.com/KirkHunter/KirkHunter.github.io/master/tourney_data.csv", draw);
</script>
</body>
</html>
FT_Diffrential Score_Differential Season Winning_Team_FTM Winning_Team_Score
3.0 9.0 2003 13.0 77.0
4.5 9.0 2004 16.0 75.5
4.0 9.5 2005 16.0 75.0
5.0 8.0 2006 15.0 73.0
6.0 10.0 2007 16.0 76.0
2.5 13.5 2008 15.0 75.5
4.0 12.0 2009 17.0 77.0
4.0 8.5 2010 15.0 73.0
4.0 9.0 2011 14.0 72.0
4.0 8.0 2012 15.0 71.0
4.0 11.0 2013 15.0 73.0
3.0 10.0 2014 15.0 75.0
5.0 8.0 2015 17.0 72.0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment