Basketball Court
HTML
<script src="//d3js.org/d3.v3.min.js"></script>
<svg></svg>
CSS
.shot-chart-court *{
fill:transparent;
stroke:#333;
stroke-width:0.1
}
.shot-chart-court-ft-circle-bottom{
stroke-dasharray:1.5, 1
}
.shot-chart-court-hoop,.shot-chart-court-backboard{
z-index:100
}
.shot-chart-title{
font-size:15%;
text-transform:uppercase
}
.legend text{
font-size:44%
}
JavaScript
opts = {
// basketball hoop diameter (ft)
basketDiameter: 1.5,
// distance from baseline to backboard (ft)
basketProtrusionLength: 4,
// backboard width (ft)
basketWidth: 6,
// title of hexagon color legend
colorLegendTitle: 'Efficiency',
// label for starting of hexagon color range
colorLegendStartLabel: '< avg',
// label for ending of hexagon color range
colorLegendEndLabel: '> avg',
// full length of basketball court (ft)
courtLength: 94,
// full width of basketball court (ft)
courtWidth: 50,
// distance from baseline to free throw line (ft)
freeThrowLineLength: 19,
// radius of free throw line circle (ft)
freeThrowCircleRadius: 6,
// d3 scale for hexagon colors
heatScale: d3.scale.quantize()
.domain([0, 1])
.range(['#5458A2', '#6689BB', '#FADC97', '#F08460', '#B02B48']),
// height of svg
height: undefined,
// method of aggregating points into a bin
hexagonBin: function (point, bin) {
var attempts = point.attempts || 1;
var made = +point.made || 0;
bin.attempts = (bin.attempts || 0) + attempts;
bin.made = (bin.made || 0) + made;
},
// how many points does a bin need to be visualized
hexagonBinVisibleThreshold: 1,
// method to determine value to be used with specified heatScale
hexagonFillValue: function(d) { return d.made/d.attempts; },
// bin size with regards to courth width/height (ft)
hexagonRadius: .75,
// discrete hexagon size values that radius value is mapped to
hexagonRadiusSizes: [0, .4, .6, .75],
// how many points in a bin to consider it while building radius scale
hexagonRadiusThreshold: 2,
// method to determine radius value to be used in radius scale
hexagonRadiusValue: function (d) { return d.attempts; },
// width of key marks (dashes on side of the paint) (ft)
keyMarkWidth: .5,
// width the key (paint) (ft)
keyWidth: 16,
// radius of...