Skip to content

Instantly share code, notes, and snippets.

@deckerlr
Last active March 23, 2016 01:15
Show Gist options
  • Save deckerlr/90d8928adf0098720bc9 to your computer and use it in GitHub Desktop.
Save deckerlr/90d8928adf0098720bc9 to your computer and use it in GitHub Desktop.
VI8 3b

The following scatterplot utilizing d3 is based heavily on code generated by Mike Bostock and Michelle Weigle.

Plot only the top 5 QBs by rank and color the marks by rank. - choose a choose a single-hue colormap

These colors were chosen because they were far from the multi-hue colormap previuosly chosen from ColorBrewer for a single-hue colormap.

Rk Player Passing Rushing
1 Marcus Mariota 3773 669
2 Garrett Grayson 3779 -25
3 Zach Terrell 3146 203
4 Blake Sims 3250 321
5 Jake Waters 3163 471
<!DOCTYPE html>
<meta charset="utf-8">
<style>
body {
font: 10px sans-serif;
}
.axis path,
.axis line {
fill: none;
stroke: #000;
shape-rendering: crispEdges;
}
.dot {
stroke: #000;
}
.tooltip {
position: absolute;
width: 200px;
height: 28px;
pointer-events: none;
}
</style>
<body>
<script src="//d3js.org/d3.v3.min.js"></script>
<script>
var margin = {top: 20, right: 20, bottom: 30, left: 40},
width = 960 - margin.left - margin.right,
height = 500 - margin.top - margin.bottom;
var x = d3.scale.linear()
.range([0, width]);
var y = d3.scale.linear()
.range([height, 0]);
var color = d3.scale.ordinal()
.domain(["1", "2", "3", "4", "5"])
.range(["#F2F0F7", "#CBC9E2", "#9E9AC8", "#756BB1", "#54278F"]);
var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom");
var yAxis = d3.svg.axis()
.scale(y)
.orient("left");
var tooltip = d3.select("body").append("div")
.attr("class", "tooltip")
.style("opacity", 0);
var svg = d3.select("body").append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
d3.tsv("data.tsv", function(error, data) {
if (error) throw error;
data.forEach(function(d) {
d.Passing = +d.Passing;
d.Rushing = +d.Rushing;
});
x.domain(d3.extent(data, function(d) { return d.Rushing; })).nice();
y.domain(d3.extent(data, function(d) { return d.Passing; })).nice();
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis)
.append("text")
.attr("class", "label")
.attr("x", width)
.attr("y", -6)
.style("text-anchor", "end")
.text("Rushing Yards (yds)");
svg.append("g")
.attr("class", "y axis")
.call(yAxis)
.append("text")
.attr("class", "label")
.attr("transform", "rotate(-90)")
.attr("y", 6)
.attr("dy", ".71em")
.style("text-anchor", "end")
.text("Passing Yards (yds)")
svg.selectAll(".dot")
.data(data)
.enter().append("circle")
.attr("class", "dot")
.attr("r", 3.5)
.attr("cx", function(d) { return x(d.Rushing); })
.attr("cy", function(d) { return y(d.Passing); })
.style("fill", function(d) { return color(d.Rk); })
.on("mouseover", function(d) {
tooltip.transition()
.duration(200)
.style("opacity", .9);
tooltip.html(d["Player"])
.style("left", (x(d.Rushing) + 5) + "px")
.style("top", (y(d.Passing) - 15) + "px");
})
.on("mouseout", function(d) {
tooltip.transition()
.duration(500)
.style("opacity", 0);
});
var legend = svg.selectAll(".legend")
.data(color.domain())
.enter().append("g")
.attr("class", "legend")
.attr("transform", function(d, i) { return "translate(0," + i * 20 + ")"; });
legend.append("rect")
.attr("x", width - 18)
.attr("width", 18)
.attr("height", 18)
.style("fill", color);
legend.append("text")
.attr("x", width - 24)
.attr("y", 9)
.attr("dy", ".35em")
.style("text-anchor", "end")
.text(function(d) { return d; });
});
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment