Skip to content

Instantly share code, notes, and snippets.

@ThomasThoren

ThomasThoren/.block

Last active Apr 12, 2016
Embed
What would you like to do?
FiveThirtyEight NBA chart
height: 700
border: no
<!DOCTYPE html>
<head>
<title>Voronoi line chart</title>
<meta charset="utf-8">
<style>
body {
width: 700px;
margin: 0;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 16px;
position: relative;
background-color: white;
}
.intro {
width: 70%;
}
#form {
font-size: 12px;
}
#select {
display: inline-block;
opacity: 1;
height: 40px;
width: 195px;
border: 3px solid black;
color: black;
}
/*option {
font-weight: normal;
display: block;
white-space: pre;
min-height: 1.2em;
padding: 0px 2px 1px;
}*/
select {
/*padding: 0;*/
/*outline: none;*/
font-size: 22px;
font-weight: 700;
margin: 0;
max-width: 100%;
background: #F0F0F0;
/*-webkit-appearance: none;*/
/*overflow: visible !important;
-webkit-appearance: menulist;
box-sizing: border-box;
align-items: center;
white-space: pre;
-webkit-rtl-ordering: logical;
cursor: default;*/
}
.wrapper {
background-color: #F0F0F0;
}
.chart {
cursor: crosshair;
}
.axis {
pointer-events: none;
font: 10px sans-serif;
}
.axis path {
fill: none;
}
.tick {
/*pointer-events: none;*/
}
.tick line {
fill: none;
stroke: black;
stroke-opacity: 0.2;
stroke-width: 1px;
shape-rendering: crispEdges;
}
/*.tick:first-of-type line {
stroke-opacity: 0;
}*/
.tick text {
/*pointer-events: none;*/
font-size: 16px;
fill: black;
text-anchor: start;
text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.3),
1px -1px 0 rgba(255, 255, 255, 0.3),
-1px 1px 0 rgba(255, 255, 255, 0.3),
-1px -1px 0 rgba(255, 255, 255, 0.3);
}
.team-lines {
fill: none;
stroke: #AAA;
stroke-linejoin: round;
stroke-linecap: round;
stroke-width: 2px;
stroke-linecap: round; /* TODO: Read more */
pointer-events: none;
}
.focus circle {
pointer-events: none;
}
.second,
.focus text {
pointer-events: none;
font-size: 22px;
font-weight: 700;
text-shadow: 0 1px 0 #fff,
1px 0 0 #fff,
0 -1px 0 #fff,
-1px 0 0 #fff;
}
.focus text {
text-anchor: middle;
fill: black;
}
.first {
font-size: 14px;
font-weight: 400;
pointer-events: none;
}
.first,
.second {
text-anchor: start;
}
.voronoi path {
fill: none;
pointer-events: all;
}
.voronoi--show path {
stroke: red;
stroke-opacity: 0.2;
}
#form {
position: absolute;
top: 20px;
right: 30px;
}
</style>
</head>
<body>
<div class="wrapper">
<div class="intro">
<span>The average chance of the</span>
<select name="select" id="select">
<option value="--" selected>--</option>
</select>
<span>winning at any point in a game this year.</span>
</div>
<label id="form" for="show-voronoi">
Show Voronoi
<input type="checkbox" id="show-voronoi" disabled>
</label>
<svg class="chart"></svg>
</div>
<script src="//d3js.org/d3.v3.min.js"></script>
<script src="//d3js.org/queue.v1.min.js"></script>
<script>
var minutes,
focus1,
focus2,
teamLabel,
team_data,
team_colors,
selected_team = false,
selected_team_path,
margin = {top: 20, right: 30, bottom: 40, left: 50},
width = 700 - margin.left - margin.right,
height = 450 - margin.top - margin.bottom;
var formatPctNumber = d3.format("0%");
var svg = d3.select('.chart');
var chart = d3.select(".chart")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
d3.selectAll('.intro')
.style('padding-top', margin.top / 2 + 'px')
.style('padding-right', margin.right + 'px')
.style('padding-left', margin.left + 'px');
var voronoiGroup = chart.append('g')
.attr('class', 'voronoi')
.attr('id', 'voronoi-group');
// Used to assign names to column placement values along the x-axis.
var x = d3.scale.linear()
.range([0, width]);
var y = d3.scale.linear()
.range([height, 0]);
// Define axes
var xAxis = d3.svg.axis()
.scale(x) // Use the defined x ordinal scale.
.tickSize(-height)
.ticks(8)
.tickPadding(20)
.orient("bottom");
var yAxis = d3.svg.axis()
.scale(y)
.orient("left")
.tickFormat(function(d, i) {
// var s = Math.floor(y.domain()[1] / 100) * 100; // Round down to nearest hundred
return i === 6
? Math.floor(d * 100) + "%"
: Math.floor(d * 100);
})
.tickPadding(40)
.ticks(5)
.tickSize(-width);
var xAxisLabels = chart.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")");
var yAxisLabels = chart.append("g")
.attr("class", "y axis");
// Voronoi
var voronoi = d3.geom.voronoi()
.x(function(d) { return x(d.minute); })
.y(function(d) { return y(d.probability); })
// .clipExtent([[-margin.left, -margin.top], [width + margin.right, height + margin.bottom]]);
.clipExtent([[0, 0], [width, height]]);
// Define line path
var line = d3.svg.line()
.x(function(d) { return x(d.minute); })
.y(function(d) { return y(d.probability); });
queue()
.defer(d3.tsv, "nba.tsv", type)
.defer(d3.json, "nba_colors.json")
.await(ready);
function ready(error, data, colors) {
if (error) throw error;
team_colors = colors;
team_data = data.sort(function(a, b) {
return (a.team < b.team) ? -1 : (a.team > b.team) ? 1 : 0;
})
x
.domain(d3.extent(minutes))
.ticks(8);
y
.domain([
d3.min(team_data, function(c) { return d3.min(c.values, function(d) { return d.probability; }); }),
d3.max(team_data, function(c) { return d3.max(c.values, function(d) { return d.probability; }); })
])
// .ticks(5)
.nice();
// debugger;
xAxis.scale(x); // Use the updated scales
yAxis.scale(y);
// Draw axes
xAxisLabels.call(xAxis);
yAxisLabels.call(yAxis);
yAxisLabels.selectAll('text')
.style('text-anchor', 'start');
yAxisLabels.selectAll('line')
.attr("x1", 4);
// Draw lines
chart.append("g")
.attr("class", "team-lines")
.selectAll("path")
.data(team_data)
.enter().append("path")
.attr('class', 'team-line')
.attr("data-teamcolor", function(d) {
var i;
for (i = 0; i < colors.teams.length; i++) {
if (colors.teams[i].team === d.team) {
return colors.teams[i].color;
}
}
})
.attr("d", function(d) {
d.line = this;
return line(d.values);
});
// Hover circle and text label
focus1 = chart.append("g")
.attr("transform", "translate(-100,-100)")
.attr("class", "focus");
focus2 = chart.append("g")
.attr("transform", "translate(-100,-100)")
.attr("class", "focus");
focus1.append("circle")
.attr('id', 'circle1')
.attr("r", 3.5);
focus2.append("circle")
.attr('id', 'circle2')
.attr("r", 3.5);
focus1.append("text")
.attr('id', 'text1')
.attr("y", -10);
focus2.append("text")
.attr('id', 'text2')
.attr("y", -10);
// Team label when hovering
teamLabel = chart.append("g")
.attr("transform", "translate(" + -width + "," + -height + ")")
.attr("class", "teamLabel");
teamLabel.append("text")
.attr('dy', -20)
.attr('class', 'first')
.attr('opacity', 0)
.text("...compared to the");
teamLabel.append("text")
.attr('class', 'second');
// Voronoi
voronoiGroup.selectAll("path")
.data(voronoi(d3.nest()
.key(function(d) { return x(d.minute) + "," + y(d.probability); })
.rollup(function(v) { return v[0]; })
.entries(d3.merge(team_data.map(function(d) { return d.values; })))
.map(function(d) { return d.values; })
))
.enter().append("path")
.attr('class', 'voronoi-path')
.attr("d", function(d) { return "M" + d.join("L") + "Z"; })
.datum(function(d) { return d.point; })
.on("mouseover", mouseover)
.on("mouseout", mouseout);
// Update dropdown menu
var select = d3.select("#select")
.on('change', selectChange);
var options = select.selectAll('.option')
.data(team_data)
.enter().append('option')
.attr('value', function(d) { return d.team; })
.text(function(d) { return d.team; });
// Show voronoi
d3.select("#show-voronoi")
.property("disabled", false)
.on("change", function() { voronoiGroup.classed("voronoi--show", this.checked); });
}
function selectChange() {
var selected = document.getElementById('select');
var value = selected.options[selected.selectedIndex].value;
// console.log(team_colors);
var team_color;
var i;
for (i = 0; i < team_colors.teams.length; i++) {
if (team_colors.teams[i].team === value) {
team_color = team_colors.teams[i].color;
}
}
d3.selectAll('#select')
.style('color', team_color);
if (value === '--') {
// TODO: Check if dropdown selection is present. If so, compare two teams.
selected_team = false;
var d = d3.selectAll('.voronoi-path')
.filter(function(d) {
if (d.city.team !== value) {
mouseout(d);
}
});
} else {
selected_team = value;
var d = d3.selectAll('.voronoi-path')
.filter(function(d) {
if (d.city.team === value) {
mouseover(d);
}
});
}
}
function mouseover(d) {
var i,
team_color,
current_minute = d.minute,
current_selected_team_probability;
if (selected_team) { // Get corresponding probability for the selected team.
for (i = 0; i < team_data.length; i++) {
if (team_data[i].team === selected_team) {
current_selected_team_probability = team_data[i].values[current_minute].probability;
}
}
}
// TODO: Also move selected line to front just before the hovered line.
// Otherwise, selected line slowly gets buried.
// if (selected_team) {
// // TODO: Get selected team's line node
// // var node = d3.selectAll(TODO);
// var parentNode = selected_team_path.parentNode;
// parentNode.appendChild(node);
// }
// Update color of line under mouseover.
d3.select(d.city.line)
.attr("stroke", function(d) {
team_color = d3.select(this).attr("data-teamcolor");
return team_color;
});
d.city.line.parentNode.appendChild(d.city.line); // Move to front
// Label and circle that move with mouse
focus1.attr("transform", "translate(" + x(d.minute) + "," + y(d.probability) + ")");
focus1.select("text").text(
formatPctNumber(d.probability)
);
if (selected_team) {
focus2.attr("transform", "translate(" + x(d.minute) + "," + y(current_selected_team_probability) + ")");
focus2.select("#text2").text(
formatPctNumber(current_selected_team_probability)
);
}
// Lower-left corner
teamLabel
.attr("transform", "translate(" + width * 0.1 + "," + height * 0.9 + ")");
if (selected_team) {
teamLabel.select('.first')
.attr('opacity', 1);
} else {
teamLabel.select('.first')
.attr('opacity', 0);
}
teamLabel.select('.second')
.attr('fill', team_color)
.text(d.city.team);
}
function mouseout(d) {
if (d.city.team === selected_team) {
return;
}
d3.select(d.city.line)
.attr("stroke", "#AAA");
focus1.attr("transform", "translate(-100,-100)");
focus2.attr("transform", "translate(-100,-100)");
teamLabel.attr("transform", "translate(" + -width + "," + -height + ")")
}
function type(d, i) {
minutes = Object
.keys(d)
.filter(function(d) {
return d !== 'team';
})
.map(function(d) { return +d; });
var team = {
team: d.team,
values: null
};
team.values = minutes.map(function(m) {
return {
city: team,
minute: +m,
probability: +d[m]
};
});
return team;
}
</script>
</body>
</html>
team 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
Hawks 0.50659 0.51033 0.515 0.51631 0.51853 0.52819 0.53316 0.52887 0.53559 0.53979 0.54406 0.55059 0.55654 0.54819 0.55298 0.54751 0.54967 0.56089 0.55626 0.57457 0.58205 0.57947 0.58893 0.60811 0.60994 0.61638 0.62932 0.64055 0.63623 0.64583 0.65302 0.66626 0.66367 0.68585 0.68545 0.68699 0.69889 0.70126 0.70873 0.71627 0.73074 0.74168 0.76403 0.78034 0.78955 0.79571 0.81632 0.83095 0.80556
Nets 0.5029 0.50561 0.50916 0.51488 0.5158 0.51226 0.52629 0.51997 0.52036 0.52213 0.51841 0.51452 0.52263 0.52271 0.52445 0.51666 0.51149 0.50685 0.50886 0.5007 0.4912 0.48797 0.49266 0.48054 0.47683 0.48004 0.47737 0.46924 0.46477 0.44831 0.43876 0.43952 0.43324 0.42479 0.42033 0.41381 0.41389 0.40248 0.39898 0.40743 0.41453 0.42484 0.42403 0.44106 0.43498 0.40266 0.39979 0.4182 0.42308
Celtics 0.50072 0.50446 0.49667 0.49552 0.49248 0.49178 0.48757 0.48156 0.46489 0.46445 0.47876 0.47318 0.47261 0.46916 0.46707 0.47046 0.47751 0.48152 0.48073 0.47784 0.48687 0.49569 0.49009 0.47899 0.48 0.48011 0.47825 0.45737 0.45678 0.45645 0.45256 0.45059 0.44908 0.44359 0.45642 0.44919 0.4477 0.45029 0.42788 0.41242 0.4099 0.39759 0.41533 0.42298 0.41764 0.43214 0.39493 0.39146 0.41176
Hornets 0.4968 0.4929 0.49334 0.48998 0.48366 0.48375 0.48789 0.48325 0.47458 0.48458 0.4849 0.49089 0.49287 0.50169 0.4962 0.49915 0.49421 0.48753 0.48754 0.50236 0.51023 0.50381 0.50926 0.50743 0.49746 0.48863 0.48544 0.49565 0.50162 0.49451 0.49507 0.49436 0.48523 0.48351 0.48134 0.48476 0.48863 0.47121 0.48139 0.46885 0.4652 0.4638 0.44927 0.45589 0.44461 0.44333 0.42749 0.40301 0.40196
Bulls 0.49521 0.49411 0.49999 0.49727 0.48183 0.4777 0.4776 0.48167 0.48419 0.48618 0.4848 0.49344 0.49283 0.49677 0.49644 0.48745 0.4944 0.49709 0.48573 0.48591 0.48437 0.47389 0.47672 0.47557 0.48612 0.4885 0.48056 0.4923 0.50045 0.51178 0.52817 0.52104 0.51034 0.52609 0.52024 0.51742 0.51572 0.50736 0.52464 0.53731 0.54208 0.5507 0.55343 0.53974 0.54905 0.55394 0.58889 0.62055 0.63889
Cavaliers 0.50632 0.51001 0.51559 0.5281 0.53398 0.54561 0.54552 0.55888 0.55277 0.54415 0.55025 0.55111 0.56327 0.56692 0.55869 0.56267 0.5671 0.57342 0.57485 0.57301 0.56152 0.56491 0.57316 0.56286 0.55653 0.55273 0.55315 0.5471 0.55056 0.53978 0.53865 0.52611 0.52965 0.5304 0.54139 0.55032 0.54464 0.55441 0.57112 0.57235 0.56008 0.56128 0.56917 0.57688 0.57877 0.5756 0.57393 0.59438 0.59091
Mavericks 0.50057 0.5049 0.51062 0.50779 0.51322 0.52419 0.52018 0.54108 0.53991 0.52999 0.54006 0.53523 0.54855 0.54649 0.55093 0.55558 0.561 0.56053 0.56216 0.56531 0.56828 0.57012 0.56965 0.56925 0.56526 0.56238 0.56082 0.55886 0.55001 0.55091 0.54678 0.55349 0.55153 0.55213 0.54834 0.54339 0.55417 0.55846 0.55719 0.5659 0.55897 0.55617 0.56061 0.57536 0.58625 0.58613 0.61335 0.60975 0.60909
Nuggets 0.50629 0.50851 0.50099 0.49103 0.48811 0.4826 0.48959 0.4852 0.47546 0.47896 0.48877 0.47794 0.47637 0.47038 0.46176 0.46352 0.46024 0.45025 0.44176 0.43789 0.44057 0.42985 0.42929 0.42715 0.43103 0.43263 0.43248 0.438 0.43453 0.43716 0.4341 0.43216 0.44052 0.45119 0.44041 0.43495 0.43038 0.42277 0.43772 0.43321 0.43965 0.43666 0.42163 0.42695 0.41269 0.40941 0.41547 0.38464 0.39623
Pistons 0.49966 0.49987 0.50095 0.49052 0.4926 0.48822 0.48644 0.49065 0.49435 0.49669 0.4947 0.49174 0.47564 0.48764 0.48807 0.47976 0.47946 0.48168 0.4826 0.47669 0.47653 0.47778 0.46992 0.4759 0.46515 0.45806 0.45361 0.44857 0.44535 0.45902 0.46223 0.45579 0.46032 0.45684 0.45124 0.45617 0.45587 0.46334 0.44568 0.43682 0.43357 0.42028 0.41708 0.39904 0.40774 0.39549 0.38524 0.37677 0.39815
Warriors 0.50006 0.50266 0.5147 0.52206 0.52458 0.52631 0.54101 0.5476 0.55366 0.55795 0.55746 0.55488 0.55876 0.56085 0.57054 0.58213 0.59007 0.60556 0.60989 0.62727 0.63749 0.63914 0.65809 0.67216 0.67476 0.69282 0.69281 0.70103 0.69819 0.71048 0.7129 0.72082 0.71602 0.72728 0.73143 0.73987 0.74419 0.75492 0.75873 0.75017 0.7419 0.74373 0.74759 0.74415 0.76916 0.78697 0.78685 0.81668 0.82
Rockets 0.49785 0.49817 0.50441 0.50788 0.5149 0.52564 0.52697 0.52832 0.53884 0.54678 0.54369 0.54798 0.54928 0.55131 0.54992 0.54673 0.54486 0.54825 0.54055 0.54452 0.54549 0.56267 0.5734 0.56865 0.57877 0.58196 0.59124 0.58634 0.59591 0.58933 0.58923 0.59497 0.6072 0.62039 0.61637 0.61843 0.62718 0.6401 0.66302 0.66739 0.67503 0.67291 0.67262 0.65435 0.65194 0.64109 0.60263 0.63115 0.63462
Pacers 0.4995 0.49613 0.49362 0.48915 0.48094 0.47262 0.46254 0.46804 0.46746 0.46001 0.46386 0.46275 0.45762 0.45492 0.45181 0.459 0.45912 0.46302 0.46686 0.46403 0.45939 0.45613 0.46168 0.45073 0.43426 0.44539 0.43913 0.41848 0.4105 0.40451 0.40404 0.40389 0.4096 0.41174 0.42167 0.42668 0.42552 0.425 0.43974 0.44431 0.44629 0.45416 0.43793 0.42011 0.40418 0.39422 0.40996 0.41359 0.40741
Clippers 0.50556 0.50592 0.51511 0.52794 0.53662 0.52963 0.53914 0.5338 0.53914 0.54073 0.54765 0.55197 0.54708 0.54004 0.52667 0.53582 0.54349 0.54138 0.54916 0.54778 0.54709 0.54955 0.53562 0.55359 0.56675 0.56647 0.57114 0.58789 0.59365 0.59441 0.60203 0.61171 0.61431 0.62093 0.61676 0.60502 0.60456 0.60613 0.58813 0.59802 0.57955 0.60137 0.61858 0.62378 0.6417 0.64496 0.64142 0.64214 0.63889
Lakers 0.49295 0.48283 0.47919 0.47825 0.47545 0.47556 0.45851 0.45114 0.44417 0.44523 0.44341 0.44887 0.44984 0.46695 0.46768 0.47161 0.4798 0.47592 0.47184 0.46437 0.45816 0.45318 0.4418 0.43643 0.43633 0.43309 0.42004 0.42545 0.4264 0.42403 0.41827 0.40484 0.38505 0.36776 0.36003 0.35364 0.33788 0.32808 0.3151 0.29939 0.31002 0.32272 0.31154 0.28615 0.285 0.30485 0.28521 0.25419 0.24528
Grizzlies 0.49748 0.4994 0.49584 0.49839 0.50381 0.51232 0.51531 0.52232 0.52486 0.52699 0.53675 0.54346 0.54411 0.54579 0.55862 0.56059 0.56341 0.56349 0.55515 0.56004 0.56192 0.57117 0.56987 0.57333 0.58095 0.58601 0.59755 0.60267 0.61287 0.62552 0.63398 0.62796 0.62496 0.64685 0.62914 0.64682 0.64841 0.65086 0.6522 0.64286 0.64077 0.6544 0.65614 0.66238 0.65911 0.67136 0.69364 0.68559 0.70755
Heat 0.50185 0.51004 0.50037 0.50107 0.506 0.49679 0.50679 0.50799 0.50075 0.49615 0.49572 0.50037 0.4965 0.50245 0.50921 0.50475 0.51075 0.51958 0.52366 0.52168 0.52573 0.53282 0.53455 0.52852 0.52789 0.52982 0.51574 0.51051 0.51918 0.51813 0.52568 0.52754 0.52126 0.49971 0.47301 0.45751 0.45119 0.43957 0.43959 0.44415 0.45184 0.44424 0.44705 0.45264 0.45918 0.46485 0.45793 0.43486 0.43137
Bucks 0.50063 0.50326 0.49707 0.49076 0.4917 0.49159 0.47593 0.48448 0.47588 0.49114 0.49591 0.48674 0.48413 0.48847 0.50216 0.52762 0.52922 0.53597 0.54186 0.54332 0.54584 0.53174 0.53544 0.54524 0.55359 0.56428 0.55978 0.55884 0.54823 0.54542 0.54909 0.55671 0.57412 0.55999 0.56874 0.57382 0.58925 0.60444 0.59225 0.59964 0.59789 0.59742 0.5938 0.57374 0.55655 0.5621 0.53144 0.52595 0.54717
Timberwolves 0.49594 0.489 0.48618 0.47759 0.4794 0.47773 0.46355 0.45743 0.45864 0.45482 0.45429 0.44999 0.44054 0.4278 0.42655 0.41931 0.41541 0.39922 0.38838 0.38006 0.37202 0.36292 0.35046 0.34768 0.34725 0.34604 0.34064 0.32888 0.32659 0.33698 0.31887 0.31634 0.31686 0.28702 0.28122 0.28738 0.27322 0.27268 0.2597 0.24388 0.24494 0.24242 0.23367 0.24958 0.25058 0.258 0.23478 0.24404 0.22642
Pelicans 0.49454 0.49158 0.49031 0.4896 0.4864 0.48845 0.49817 0.49012 0.49415 0.49617 0.49715 0.49429 0.48815 0.48601 0.47513 0.479 0.47876 0.48634 0.48619 0.49444 0.50567 0.51376 0.51949 0.51717 0.53015 0.53554 0.53665 0.53944 0.54205 0.53967 0.53463 0.52773 0.52796 0.52348 0.52187 0.52653 0.523 0.52361 0.52418 0.53354 0.55043 0.53668 0.52674 0.52573 0.52204 0.50877 0.53116 0.50918 0.5283
Knicks 0.49641 0.48715 0.48102 0.47614 0.47718 0.47434 0.46972 0.46332 0.46068 0.46056 0.45196 0.4402 0.44458 0.4436 0.43774 0.42112 0.41815 0.41045 0.40399 0.40141 0.39218 0.38302 0.37913 0.38125 0.37483 0.37409 0.3728 0.36404 0.33662 0.32848 0.32558 0.32101 0.31465 0.30546 0.31202 0.31205 0.30928 0.31292 0.30747 0.30769 0.30707 0.29843 0.2728 0.25048 0.23738 0.23506 0.2153 0.23758 0.22115
Thunder 0.50234 0.5056 0.51094 0.50833 0.51464 0.51581 0.51944 0.5149 0.52346 0.53429 0.5379 0.54434 0.53703 0.5423 0.5474 0.53866 0.54079 0.53281 0.53959 0.5459 0.54159 0.54558 0.54002 0.53202 0.5239 0.52423 0.51825 0.5351 0.55276 0.55758 0.56067 0.55977 0.57222 0.5816 0.57522 0.56631 0.57744 0.5612 0.53668 0.54343 0.53161 0.52505 0.54212 0.56238 0.55633 0.54175 0.54928 0.54605 0.5283
Magic 0.5003 0.49621 0.48724 0.48255 0.47933 0.47115 0.46852 0.46738 0.46479 0.47313 0.46338 0.45438 0.44875 0.43909 0.44679 0.44249 0.43855 0.44011 0.44564 0.42977 0.41597 0.40901 0.41592 0.41079 0.40985 0.39909 0.41328 0.41139 0.40176 0.39387 0.39976 0.38301 0.38529 0.36792 0.37472 0.36093 0.34964 0.35416 0.35101 0.36046 0.34937 0.32468 0.32018 0.3219 0.30686 0.29497 0.29847 0.2664 0.28571
76ers 0.49579 0.49048 0.47738 0.48725 0.48051 0.47748 0.46175 0.45028 0.44632 0.43626 0.41519 0.40911 0.39735 0.38336 0.3762 0.38015 0.37129 0.36372 0.37013 0.35408 0.34302 0.33818 0.33384 0.32114 0.3164 0.29565 0.28013 0.2714 0.26472 0.26892 0.26749 0.27125 0.27422 0.26929 0.27022 0.27705 0.26862 0.25784 0.25957 0.25492 0.25248 0.26361 0.25132 0.23938 0.22987 0.22357 0.23343 0.24307 0.22642
Suns 0.50173 0.49609 0.49791 0.49884 0.49387 0.48473 0.48745 0.47222 0.47362 0.47386 0.46884 0.47604 0.4782 0.47693 0.46875 0.47415 0.47121 0.48171 0.48053 0.49588 0.50833 0.50582 0.50176 0.50292 0.50196 0.51354 0.51527 0.51271 0.52972 0.52838 0.51991 0.53202 0.53261 0.52214 0.52388 0.50982 0.51601 0.52819 0.54672 0.55258 0.54686 0.54771 0.54283 0.5478 0.55691 0.56634 0.59005 0.61414 0.58491
Trail Blazers 0.50597 0.50963 0.51288 0.51226 0.51042 0.51231 0.50684 0.50736 0.50899 0.49891 0.49435 0.49241 0.49757 0.49991 0.49618 0.49735 0.48674 0.48661 0.49884 0.50274 0.50127 0.51123 0.51158 0.51377 0.51817 0.5202 0.51245 0.51898 0.52481 0.51758 0.52109 0.50814 0.51304 0.52769 0.53447 0.54699 0.54007 0.55397 0.55131 0.57455 0.58539 0.60163 0.6072 0.6154 0.64679 0.67641 0.68548 0.65526 0.65385
Kings 0.50255 0.5026 0.49792 0.50645 0.50326 0.51691 0.52521 0.5253 0.52679 0.52059 0.50499 0.49907 0.50855 0.50103 0.49991 0.4807 0.47593 0.46588 0.46809 0.46456 0.4555 0.46567 0.46461 0.46629 0.46551 0.45519 0.45909 0.46158 0.45731 0.44783 0.44834 0.44144 0.41818 0.40921 0.41349 0.40713 0.38018 0.38543 0.39397 0.38855 0.38981 0.38358 0.38299 0.39247 0.3966 0.37638 0.37943 0.34526 0.33654
Spurs 0.50132 0.50692 0.509 0.51354 0.50912 0.50952 0.50721 0.51497 0.52273 0.53295 0.53617 0.55558 0.55388 0.56435 0.5634 0.55665 0.55583 0.55821 0.57697 0.58152 0.58912 0.59575 0.58282 0.59552 0.58055 0.57545 0.58437 0.59344 0.58875 0.58243 0.56542 0.57606 0.58082 0.57484 0.58245 0.58189 0.59516 0.59458 0.6092 0.6121 0.61777 0.62611 0.63115 0.63321 0.64128 0.65376 0.64433 0.69058 0.66981
Raptors 0.49558 0.49875 0.5042 0.50387 0.50492 0.49835 0.49825 0.49874 0.50431 0.50233 0.4947 0.49752 0.50397 0.50489 0.52241 0.53614 0.5423 0.54469 0.53618 0.52985 0.53234 0.54979 0.54747 0.55252 0.55954 0.55377 0.55648 0.55595 0.56283 0.57901 0.57212 0.59849 0.60936 0.62889 0.62883 0.63349 0.65383 0.65844 0.64669 0.64405 0.65365 0.65148 0.65718 0.65413 0.65111 0.64425 0.6385 0.67018 0.67308
Jazz 0.49181 0.49337 0.49271 0.48511 0.49299 0.49826 0.50189 0.50393 0.49339 0.47568 0.47518 0.47731 0.48016 0.48564 0.4834 0.48115 0.46878 0.45677 0.44932 0.44204 0.43462 0.41851 0.41368 0.40234 0.40241 0.40038 0.40992 0.39773 0.39455 0.39479 0.39418 0.3946 0.39451 0.40251 0.4185 0.43982 0.44357 0.42433 0.41862 0.40634 0.38745 0.37937 0.37572 0.38528 0.39577 0.39115 0.38618 0.3431 0.35849
Wizards 0.50429 0.50344 0.50945 0.51173 0.51391 0.51028 0.51332 0.51939 0.53462 0.52848 0.53593 0.53345 0.53256 0.52541 0.52458 0.52394 0.52225 0.52245 0.51856 0.51423 0.53108 0.52806 0.53679 0.54964 0.55575 0.55662 0.56965 0.57759 0.5802 0.5769 0.59431 0.59094 0.59152 0.59812 0.60713 0.59886 0.59921 0.59855 0.5988 0.5855 0.59076 0.58128 0.60136 0.59199 0.56716 0.57329 0.59176 0.60289 0.60185
{
"teams": [
{
"place": "Atlanta",
"team": "Hawks",
"color": "#E13A3E"
},
{
"place": "Boston",
"team": "Celtics",
"color": "#008348"
},
{
"place": "Brooklyn",
"team": "Nets",
"color": "#061922"
},
{
"place": "Charlotte",
"team": "Hornets",
"color": "#1D1160"
},
{
"place": "Chicago",
"team": "Bulls",
"color": "#CE1141"
},
{
"place": "Cleveland",
"team": "Cavaliers",
"color": "#860038"
},
{
"place": "Dallas",
"team": "Mavericks",
"color": "#007DC5"
},
{
"place": "Denver",
"team": "Nuggets",
"color": "#4D90CD"
},
{
"place": "Detroit",
"team": "Pistons",
"color": "#ED174C"
},
{
"place": "Golden State",
"team": "Warriors",
"color": "#FDB927"
},
{
"place": "Houston",
"team": "Rockets",
"color": "#CE1141"
},
{
"place": "Indiana",
"team": "Pacers",
"color": "#FFC633"
},
{
"place": "Los Angeles",
"team": "Clippers",
"color": "#ED174C"
},
{
"place": "Los Angeles",
"team": "Lakers",
"color": "#FDB927"
},
{
"place": "Memphis",
"team": "Grizzlies",
"color": "#0F586C"
},
{
"place": "Miami",
"team": "Heat",
"color": "#98002E"
},
{
"place": "Milwaukee",
"team": "Bucks",
"color": "#00471B"
},
{
"place": "Minnesota",
"team": "Timberwolves",
"color": "#005083"
},
{
"place": "New Orleans",
"team": "Pelicans",
"color": "#002B5C"
},
{
"place": "New York",
"team": "Knicks",
"color": "#006BB6"
},
{
"place": "Oklahoma City",
"team": "Thunder",
"color": "#007DC3"
},
{
"place": "Orlando",
"team": "Magic",
"color": "#007DC5"
},
{
"place": "Philadelphia",
"team": "76ers",
"color": "#ED174C"
},
{
"place": "Phoenix",
"team": "Suns",
"color": "#E56020"
},
{
"place": "Portland",
"team": "Trail Blazers",
"color": "#E03A3E"
},
{
"place": "Sacramento",
"team": "Kings",
"color": "#724C9F"
},
{
"place": "San Antonio",
"team": "Spurs",
"color": "#BAC3C9"
},
{
"place": "Toronto",
"team": "Raptors",
"color": "#CE1141"
},
{
"place": "Utah",
"team": "Jazz",
"color": "#002B5C"
},
{
"place": "Washington",
"team": "Wizards",
"color": "#002B5C"
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.