Skip to content

Instantly share code, notes, and snippets.

@apratt2003
Last active November 8, 2017 14:45
Show Gist options
  • Save apratt2003/0fdbd45e60083ea36cfdd02eeae3e783 to your computer and use it in GitHub Desktop.
Save apratt2003/0fdbd45e60083ea36cfdd02eeae3e783 to your computer and use it in GitHub Desktop.
Test - Rocket League Interactive Scatter Plot
license: mit
border: no

** 10/25/17 - This block was updated with additional change over time interactions with the addition of changing radius (as well as X, Y, and Color) with a numeric attribute. **

This bl.ock's data describes Rocket League statistics generated by top players in the first three seasons of Rocket League's League Play (qualifiers to participate in each years Rocket League Champtionship Series). The original compiled data can be found at Parrallel.GG, and the processed CSV version on my Github.

The default scatter plot describes an individuals win percentage to their miscellaneous score per game (score which is aquired through objectives such as scoring, assiting, clearing the ball, saving the ball, etc.). The user may select the continuous statistics as either the x-axis or y-axis. One can also select a nominal attribute to color the corresponding circles as well as a continuous attribute to modify the radius of the circles.

This example demonstrates usage of a new library called d3-component and Redux to create a scatter plot with menus for X, Y, and color, and some animations. It's an experiment to see how things play out when pairing D3 directly with Redux, without React in the middle.

Built with blockbuilder.org

forked from curran's block: Spinner with d3-component

forked from curran's block: Scatter Plot with Menus

forked from dennisjunior111's block: RKL Test - Scatter Plot with Menus

forked from anonymous's block: 2 RKL Test - Scatter Plot with Menus

forked from dennisjunior111's block: Rocket League Interactive Scatter Plot

forked from dennisjunior111's block: Test - Rocket League Interactive Scatter Plot

<!DOCTYPE html>
<head>
<meta charset="utf-8">
<script src="https://unpkg.com/d3@4"></script>
<script src="https://unpkg.com/d3-component@3"></script>
<script src="https://unpkg.com/redux@3/dist/redux.min.js"></script>
<script src="https://unpkg.com/d3-tip@0.7.1"></script>
<link rel="stylesheet" href="https://unpkg.com/bootstrap@4.0.0-alpha.6/dist/css/bootstrap.min.css">
<style>
.point {
fill: currentColor;
stroke: currentColor;
fill-opacity: 0.3;
}
/* Tooltip styles copied from
http://bl.ocks.org/Caged/6476579 */
.d3-tip {
line-height: 1;
padding: 12px;
background: rgba(0, 0, 0, 0.8);
color: #fff;
border-radius: 2px;
}
/* Make the chart container fill the page using CSS. */
#chart {
position: fixed;
left: 0px;
right: 0px;
top: 0px;
bottom: 0px;
}
</style>
</head>
<body>
<div id="viz"></div>
<script>
var vizDiv = document.getElementById("viz");
// This stateless component renders a static "wheel" made of circles,
// and rotates it depending on the value of props.angle.
var wheel = d3.component("g")
.create(function (selection){
var minRadius = 4,
maxRadius = 10,
numDots = 10,
wheelRadius = 40,
rotation = 0,
rotationIncrement = 3,
radius = d3.scaleLinear()
.domain([0, numDots - 1])
.range([maxRadius, minRadius]),
angle = d3.scaleLinear()
.domain([0, numDots])
.range([0, Math.PI * 2]);
selection
.selectAll("circle").data(d3.range(numDots))
.enter().append("circle")
.attr("cx", function (d){ return Math.sin(angle(d)) * wheelRadius; })
.attr("cy", function (d){ return Math.cos(angle(d)) * wheelRadius; })
.attr("r", radius);
})
.render(function (selection, d){
selection.attr("transform", "rotate(" + d + ")");
});
// This component with a local timer makes the wheel spin.
var spinner = (function (){
var timer = d3.local();
return d3.component("g")
.create(function (selection, d){
timer.set(selection.node(), d3.timer(function (elapsed){
selection.call(wheel, elapsed * d.speed);
}));
})
.render(function (selection, d){
selection.attr("transform", "translate(" + d.x + "," + d.y + ")");
})
.destroy(function(selection, d){
timer.get(selection.node()).stop();
return selection
.attr("fill-opacity", 1)
.transition().duration(3000)
.attr("transform", "translate(" + d.x + "," + d.y + ") scale(10)")
.attr("fill-opacity", 0);
});
}());
var axis = (function (){
var axisLocal = d3.local();
return d3.component("g")
.create(function (selection, d){
axisLocal.set(selection.node(), d3["axis" + d.type]());
selection
.attr("opacity", 0)
.call(axisLocal.get(selection.node())
.scale(d.scale)
.ticks(d.ticks || 10))
.transition("opacity").duration(2000)
.attr("opacity", 0.8);
})
.render(function (selection, d){
selection
.attr("transform", "translate(" + [
d.translateX || 0,
d.translateY || 0
] + ")")
.transition("ticks").duration(3000)
.call(axisLocal.get(selection.node()));
});
}());
// This component displays the visualization.
var scatterPlot = (function (){
var xScale = d3.scaleLinear(),
yScale = d3.scaleLinear(),
colorScale = d3.scaleOrdinal()
.range(d3.schemeCategory10),
radiusScale = d3.scaleSqrt(); // add new scale for circle
function render(selection, d){
var x = d.x,
y = d.y,
color = d.color,
margin = d.margin,
innerWidth = d.width - margin.left - margin.right,
innerHeight = d.height - margin.top - margin.bottom,
radius = d.radius,
minRadius = 1,
maxRadius = 15;
xScale
.domain(d3.extent(d.data, function (d){ return d[x]; }))
.range([0, innerWidth]);
yScale
.domain(d3.extent(d.data, function (d){ return d[y]; }))
.range([innerHeight, 0]);
colorScale
.domain(d3.extent(d.data, function (d){ return d[color]; }));
radiusScale
.range([1,10])
.domain(d3.extent(d.data, function (d){ return d[radius]; }));
selection
.attr("transform", "translate(" + margin.left + "," + margin.top + ")")
.call(axis, [
{
type: "Left",
scale: yScale,
translateX: -12
},
{
type: "Bottom",
scale: xScale,
translateY: innerHeight + 12,
ticks: 20
}
])
FilterSeasonNumber = 1
var circles = selection.selectAll(".point").data(d.data);
circles.exit().remove();
circles
.enter().append("circle")
.filter(function(d) { return d.Season = FilterSeasonNumber})
.attr("class", "point")
.attr("r", 0)
.attr("cx", d.width / 2 - margin.left)
.attr("cy", d.height / 2 - margin.top)
.merge(circles)
.filter(function(d) { return d.Season = FilterSeasonNumber})
.on("mouseover", d.show)
.on("mouseout", d.hide)
.transition()
.duration(2000)
.delay(function (d, i){ return i * 5; })
.attr("r", function (d){ return radiusScale(d[radius]); })
.attr("cx", function (d){ return xScale(d[x]); })
.attr("cy", function (d){ return yScale(d[y]); })
.attr("color", function (d){ return colorScale(d[color]); })
}
return d3.component("g")
.render(render);
}());
// Leverage the d3-tip library for tooltips.
var tooltip = (function (){
var tip = d3.tip()
.attr("class", "d3-tip")
.offset([-10, 0]);
return function (svgSelection, state){
// Wish we could use D3 here for DOM manipulation..
tip.html(function(d) {
return [
"<h4>" + d.Player + " (" + d.Team + ")" + "</h4>",
"<div><strong>" + state.x + ": </strong>",
"<span>" + d[state.x] + "</span></div>",
"<div><strong>" + state.y + ": </strong>",
"<span>" + d[state.y] + "</span></div>",
"<div><strong>" + state.color + ": </strong>",
"<span>" + d[state.color] + "</span></div>",
"<div><strong>" + state.radius + ": </strong>",
"<span>" + d[state.radius] + "</span></div>"
].join("");
});
svgSelection.call(tip);
return {
show: tip.show,
hide: tip.hide
};
}
}());
// ---------------------------------------------------------------
// This component manages an svg element, and
// either displays a spinner or text,
// depending on the value of the `loading` state.
var svg = d3.component("svg")
.render(function (selection, d){
var svgSelection = selection
.attr("width", d.width)
.attr("height", d.height)
.call(spinner, !d.loading ? [] : {
x: d.width / 2,
y: d.height / 2,
speed: 0.2
});
var tipCallbacks = tooltip(svgSelection, d);
svgSelection
.call(scatterPlot, d.loading ? [] : d, tipCallbacks);
});
var label = d3.component("label", "col-sm-2 col-form-label")
.render(function (selection, d){
selection.text(d);
});
var option = d3.component("option")
.render(function (selection, d){
selection.text(d);
});
var select = d3.component("select", "form-control")
.render(function (selection, d){
selection
.call(option, d.columns)
.property("value", d.value)
.on("change", function (){
d.action(this.value);
})
});
var rowComponent = d3.component("div", "row");
var colSm10 = d3.component("div", "col-sm-10");
var menu = d3.component("div", "col-sm-4")
.render(function (selection, d){
var row = rowComponent(selection).call(label, d.label);
colSm10(row).call(select, d);
});
var menus = d3.component("div", "container-fluid")
.create(function (selection){
selection.style("opacity", 0);
})
.render(function (selection, d){
rowComponent(selection).call(menu, [
{
label: "X",
value: d.x,
action: d.setX,
columns: d.numericColumns
},
{
label: "Y",
value: d.y,
action: d.setY,
columns: d.numericColumns
},
{
label: "Color",
value: d.color,
action: d.setColor,
columns: d.ordinalColumns
},
{
label: "Radius",
value: d.radius,
action: d.setRadius,
columns: d.numericColumns
},
{
label: "Filter",
value: d.season,
action: d.setSeason,
columns: d.seasonFilters
}
], d);
if(!d.loading && selection.style("opacity") === "0"){
selection.transition().duration(2000)
.style("opacity", 1);
}
});
var app = d3.component("div")
.render(function (selection, d){
selection.call(menus, d).call(svg, d);
});
function loadData(actions){
var numericColumns = [
"Games Played",
"Win Percentage",
"Average Scoreboard Position",
"Shooting Percentage",
"Goal Participation",
"Misc Score Per Game",
"Number of Wins",
"Score Per Game",
"Goals Per Game",
"Assists Per Game",
"Saves Per Game",
"Shots Per Game",
"MVPs Per Game",
"Percent of Team's Score",
"Percent of Team's Assists",
"Percent of Team's Saves",
"Percent of Team's Shots",
"Percent of Team's MVPs"
],
ordinalColumns = [
"Season",
"Player",
"Team"
],
seasonFilters = [
"All Seasons",
"1",
"2",
"3"
];
setTimeout(function (){ // Show off the spinner for a few seconds ;)
d3.csv("rkl_3seasons.csv", type, function (data){
actions.ingestData(data, numericColumns, ordinalColumns, seasonFilters)
});
}, 500);
function type(d){
return numericColumns.reduce(function (d, column){
d[column] = + d[column];
return d;
}, d);
}
}
// ------------------------------------------------------------
function reducer (state, action){
var state = state || {
width: 960,
height: 500 - 38,
loading: true,
margin: {top: 12, right: 12, bottom: 40, left: 50},
x: "Win Percentage",
y: "Misc Score Per Game",
color: "Season",
radius: "Games Played",
season: "All Seasons"
};
switch (action.type) {
case "INGEST_DATA":
return Object.assign({}, state, {
loading: false,
data: action.data,
numericColumns: action.numericColumns,
ordinalColumns: action.ordinalColumns,
seasonFilters: action.seasonFilters
});
case "SET_X":
return Object.assign({}, state, { x: action.column });
case "SET_Y":
return Object.assign({}, state, { y: action.column });
case "SET_COLOR":
return Object.assign({}, state, { color: action.column });
case "SET_RADIUS":
return Object.assign({}, state, { radius: action.column });
case "SET_SEASON":
console.log("engaging Set_season")
return Object.assign({}, state, { season: action.column });
default:
return state;
}
}
function actionsFromDispatch(dispatch){
return {
ingestData: function (data, numericColumns, ordinalColumns, seasonFilters){
dispatch({
type: "INGEST_DATA",
data: data,
numericColumns: numericColumns,
ordinalColumns: ordinalColumns,
seasonFilters: seasonFilters
});
},
setX: function (column){
dispatch({ type: "SET_X", column: column });
},
setY: function (column){
dispatch({ type: "SET_Y", column: column });
},
setColor: function (column){
dispatch({ type: "SET_COLOR", column: column });
},
setRadius: function (column){
console.log(column)
dispatch({ type: "SET_RADIUS", column: column });
},
setSeason: function (data){
console.log(data)
dispatch({ type: "SET_SEASON", column: data });
}
};
}
//
//var svg = d3.select(vizDiv).append("svg");
function main(){
// grab the screen width and height computed by css
//var width = vizDiv.clientWidth;
//var height = vizDiv.clientHeight;
var store = Redux.createStore(reducer),
actions = actionsFromDispatch(store.dispatch);
renderApp = function(){
d3.select("body").call(app, store.getState(), actions);
}
renderApp();
store.subscribe(renderApp);
loadData(actions);
}
// draw for the first time to initialize
main();
// redraw based on new window size when browser is resided
window.addEventListener("resize", main);
</script>
</body>
Season Player Team Games Played Win Percentage Average Scoreboard Position Shooting Percentage Assists Per Goal Goal Participation Misc Score Per Game Misc Score Percentage Number of Wins Score Per Game Goals Per Game Assists Per Game Saves Per Game Shots Per Game MVPs Per Game Percent of Team's Score Percent of Team's Goals Percent of Team's Assists Percent of Team's Saves Percent of Team's Shots Percent of Team's MVPs
1 Chausette45 Shoot N Goal 25 0.52 1.76 0.2308 0.58 0.6786 91 0.473 13 192.2 0.48 0.28 1.56 2.08 0.28 0.36 0.429 0.368 0.345 0.406 0.538
1 Continuum Aeriality 31 0.323 2.13 0.2727 0.61 0.5273 101.1 0.496 10 204.03 0.58 0.35 1.32 2.13 0.1 0.305 0.327 0.256 0.323 0.297 0.3
1 Cooper Shoot N Goal 4 0.25 1.75 0.6 1 0.8571 103.8 0.454 1 228.75 0.75 0.75 2 1.25 0 0.401 0.429 0.6 0.421 0.217 0
1 Dogu The Flying Dutchmen 49 0.49 2.04 0.3246 0.57 0.537 106.1 0.444 24 238.98 0.76 0.43 1.98 2.33 0.18 0.34 0.343 0.28 0.388 0.327 0.375
1 Doomsee Supersonic Avengers 46 0.391 2.13 0.2701 0.7 0.5727 99.8 0.435 18 229.24 0.8 0.57 1.22 2.98 0.04 0.326 0.336 0.329 0.293 0.349 0.111
1 ELMP Supersonic Avengers 46 0.391 2.13 0.2721 0.76 0.5909 92.5 0.411 18 224.89 0.8 0.61 1.3 2.96 0.17 0.32 0.336 0.354 0.314 0.346 0.444
1 Fakyy Shoot N Goal 12 0.167 2.58 0.1579 1.33 0.3889 67.5 0.464 2 145.42 0.25 0.33 1.33 1.58 0 0.274 0.167 0.364 0.291 0.317 0
1 FaNaTiz Shoot N Goal 29 0.448 2.17 0.2045 0.89 0.5313 86.2 0.514 13 167.59 0.31 0.28 1.45 1.52 0.1 0.321 0.281 0.4 0.323 0.31 0.231
1 GingerNinjaDT9 Comrade Gaming 29 0.172 1.83 0.2676 0.58 0.5172 89 0.461 5 192.93 0.66 0.38 1 2.45 0.07 0.294 0.328 0.256 0.228 0.355 0.4
1 gReazy Northern Gaming 64 0.688 1.81 0.2698 1.2 0.6054 135.9 0.497 44 273.12 0.8 0.95 1.17 2.95 0.23 0.347 0.276 0.401 0.379 0.309 0.341
1 Jessie The Flying Dutchmen 49 0.49 2.27 0.3162 0.73 0.5926 106.1 0.463 24 229.18 0.76 0.55 1.43 2.39 0.14 0.326 0.343 0.36 0.28 0.335 0.292
1 Juuksey Comrade Gaming 34 0.147 1.41 0.3012 0.56 0.619 115.1 0.459 5 251.03 0.74 0.41 2.09 2.44 0.03 0.385 0.397 0.298 0.476 0.344 0.2
1 Kaydop Aeriality 31 0.323 1.9 0.2237 0.94 0.6 134 0.549 10 244.19 0.55 0.52 1.32 2.45 0.1 0.365 0.309 0.372 0.323 0.342 0.3
1 killarnaud Shoot N Goal 29 0.448 2.31 0.2667 0.25 0.4688 91.2 0.519 13 175.69 0.41 0.1 1.52 1.55 0.14 0.337 0.375 0.15 0.339 0.317 0.308
1 kuxir97 FlipSid3 Tactics 66 0.697 1.92 0.3167 0.69 0.5728 126.4 0.458 46 276.29 1.06 0.73 1.14 3.35 0.23 0.342 0.34 0.308 0.31 0.328 0.326
1 Lunation Comrade Gaming 34 0.147 2 0.24 1.11 0.6032 100.9 0.49 5 206.03 0.53 0.59 1.24 2.21 0.06 0.316 0.286 0.425 0.282 0.311 0.4
1 M1k3Rules FlipSid3 Tactics 66 0.697 2.21 0.295 0.93 0.5534 102.9 0.425 46 241.89 0.89 0.83 1.12 3.03 0.14 0.3 0.286 0.353 0.306 0.297 0.196
1 Maestro Northern Gaming 64 0.688 2.22 0.3303 0.64 0.6378 103.8 0.417 44 249.06 1.12 0.72 0.8 3.41 0.22 0.317 0.389 0.303 0.258 0.357 0.318
1 Markydooda FlipSid3 Tactics 66 0.697 1.86 0.3056 0.69 0.6311 117.6 0.408 46 288.48 1.17 0.8 1.41 3.82 0.33 0.358 0.374 0.34 0.384 0.374 0.478
1 OSP Comrade Gaming 5 0 2.2 0.0833 2 0.6 120 56.9 0 211 0.2 0.4 1.4 2.4 0 0.336 0.2 0.5 0.318 0.293 0
1 paschy90 Mock EU 49 0.469 2.04 0.2768 1 0.5962 113 0.487 23 231.94 0.63 0.63 1.49 2.29 0.14 0.335 0.298 0.419 0.333 0.304 0.304
1 Piksel Aeriality 31 0.323 1.97 0.25 0.8 0.6545 100.8 0.456 10 220.97 0.65 0.52 1.45 2.58 0.13 0.33 0.364 0.372 0.354 0.36 0.4
1 remkoe Northern Gaming 64 0.688 1.97 0.3039 0.73 0.5784 122.4 0.463 44 264.38 0.97 0.7 1.12 3.19 0.23 0.336 0.335 0.296 0.364 0.334 0.341
1 Sikii Mock EU 49 0.469 2.08 0.2672 0.81 0.5385 106.1 0.472 23 224.8 0.63 0.51 1.55 2.37 0.1 0.325 0.298 0.338 0.347 0.315 0.217
1 Snaski Supersonic Avengers 46 0.391 1.74 0.3 0.69 0.5545 117 0.469 18 249.57 0.78 0.54 1.63 2.61 0.17 0.355 0.327 0.316 0.393 0.305 0.444
1 Turbopolsa Mock EU 49 0.469 1.88 0.3 0.43 0.5769 104.2 0.444 23 234.8 0.86 0.37 1.43 2.86 0.22 0.34 0.404 0.243 0.32 0.38 0.478
1 Vogan The Flying Dutchmen 49 0.49 1.94 0.2881 0.79 0.5648 108.3 0.46 24 235.2 0.69 0.55 1.69 2.41 0.16 0.334 0.315 0.36 0.332 0.338 0.333
2 Fireburner NRG Esports 56 0.589 1.86 0.3297 0.44 0.6567 111.7 0.413 33 270.18 1.09 0.48 1.73 3.3 0.29 0.364 0.455 0.262 0.414 0.429 0.485
2 GarrettG Orbit 49 0.551 1.45 0.3355 0.45 0.6727 152.7 0.504 27 302.76 1.04 0.47 1.59 3.1 0.37 0.411 0.464 0.291 0.406 0.399 0.667
2 Vince Deception 28 0.357 1.71 0.3415 0.71 0.7619 139.6 0.497 10 280.89 1 0.71 1.18 2.93 0.21 0.379 0.444 0.4 0.287 0.371 0.6
2 Markydooda FlipSid3 Tactics 67 0.701 2.12 0.2591 0.56 0.6211 118.4 0.457 47 259.18 0.96 0.54 0.97 3.69 0.21 0.316 0.398 0.288 0.242 0.369 0.298
2 Espeon Genesis 53 0.547 1.72 0.3182 0.33 0.6633 130.4 0.501 29 260.28 0.92 0.3 1.3 2.91 0.32 0.373 0.5 0.222 0.354 0.422 0.586
2 DarkFire Vendetta 45 0.489 1.93 0.328 0.73 0.6514 123.6 0.479 22 258 0.91 0.67 1.22 2.78 0.18 0.339 0.376 0.337 0.302 0.355 0.364
2 Maestro Northern Gaming 57 0.544 1.82 0.2898 0.55 0.622 119.2 0.467 31 255.44 0.89 0.49 1.32 3.09 0.16 0.347 0.402 0.295 0.362 0.385 0.29
2 Lethamyr Vendetta 9 0.444 2.11 0.4444 1.12 0.7083 135 0.526 4 256.67 0.89 1 0.89 2 0.22 0.337 0.333 0.45 0.242 0.281 0.5
2 remkoe Northern Gaming 57 0.544 1.86 0.3356 0.6 0.6299 132.2 0.515 31 256.49 0.88 0.53 1.12 2.61 0.28 0.349 0.394 0.316 0.309 0.326 0.516
2 paschy90 Mock EU 81 0.556 2.04 0.3175 0.63 0.6264 124.9 0.489 45 255.37 0.83 0.52 1.48 2.6 0.17 0.321 0.385 0.298 0.325 0.328 0.311
2 Matt Vendetta 32 0.531 1.97 0.2955 0.65 0.5375 127.3 0.488 17 260.78 0.81 0.53 1.53 2.75 0.16 0.333 0.325 0.262 0.358 0.344 0.294
2 kuxir97 FlipSid3 Tactics 67 0.701 1.91 0.2432 0.94 0.6522 140.8 0.492 47 286.42 0.81 0.76 1.46 3.31 0.22 0.349 0.335 0.408 0.364 0.331 0.319
2 Kronovi G2 Esports 29 0.414 1.55 0.284 0.48 0.6415 128.3 0.486 12 264.14 0.79 0.38 1.79 2.79 0.17 0.38 0.434 0.289 0.403 0.362 0.417
2 Sebadam Summit 24 0.208 1.79 0.4043 0.53 0.7436 110 0.474 5 232.08 0.79 0.42 1.71 1.96 0.08 0.366 0.487 0.345 0.406 0.338 0.4
2 Kaydop Precision Z 55 0.455 1.8 0.2688 0.49 0.5981 128.8 0.493 25 261.09 0.78 0.38 1.6 2.91 0.25 0.347 0.402 0.247 0.342 0.359 0.56
2 HotWheelsSid Revival 34 0.382 1.94 0.266 0.72 0.6418 115 0.495 13 232.21 0.74 0.53 1.03 2.76 0.12 0.336 0.373 0.327 0.28 0.379 0.308
2 Torment Vendetta 45 0.489 2.04 0.3028 0.97 0.5963 123.3 0.491 22 251.33 0.73 0.71 1.49 2.42 0.16 0.33 0.303 0.36 0.368 0.31 0.318
2 Tequilaz Red Eye 41 0.463 2.39 0.3846 0.5 0.5422 97.4 0.473 19 205.85 0.73 0.37 1.37 1.9 0.07 0.287 0.361 0.25 0.293 0.267 0.158
2 Zanejackey Take 3 65 0.446 2.08 0.2765 0.66 0.6094 124.9 0.514 29 243 0.72 0.48 1.23 2.62 0.15 0.342 0.367 0.32 0.3 0.378 0.345
2 Deevo Mock EU 81 0.556 1.91 0.2775 0.9 0.6322 151.2 0.535 45 282.78 0.72 0.64 1.64 2.58 0.23 0.356 0.333 0.369 0.36 0.325 0.422
2 chausette45 Red Eye 41 0.463 1.63 0.2816 0.72 0.6024 143.2 0.509 19 281.46 0.71 0.51 2.1 2.51 0.27 0.392 0.349 0.35 0.45 0.353 0.579
2 Chrome Revival 27 0.444 2.11 0.2969 0.95 0.6167 113.1 0.482 12 234.81 0.7 0.67 1.37 2.37 0.11 0.322 0.317 0.346 0.352 0.317 0.25
2 Bell Deception 10 0.4 2.1 0.4375 1 0.5 102.5 0.479 4 214 0.7 0.7 1.4 1.6 0 0.269 0.25 0.292 0.333 0.202 0
2 SadJunior NRG Esports 56 0.589 2.07 0.3047 0.85 0.5373 123.1 0.52 33 236.88 0.7 0.59 1.23 2.29 0.18 0.319 0.291 0.32 0.295 0.297 0.303
2 Turbopolsa OhMyDog 28 0.393 1.61 0.2405 0.37 0.619 159.3 0.549 11 290 0.68 0.25 1.93 2.82 0.32 0.422 0.452 0.212 0.429 0.416 0.818
2 gReazy FlipSid3 Tactics 58 0.707 1.88 0.2147 0.92 0.5141 147.5 0.524 41 281.64 0.66 0.6 1.62 3.05 0.29 0.346 0.268 0.312 0.42 0.303 0.415
2 Turtle Orbit 49 0.551 2.35 0.2759 0.84 0.5364 105 0.487 27 215.51 0.65 0.55 1.14 2.37 0.06 0.292 0.291 0.342 0.292 0.304 0.111
2 Genocop Revival 34 0.382 1.82 0.275 0.82 0.597 127.2 0.523 13 243.38 0.65 0.53 1.41 2.35 0.18 0.352 0.328 0.327 0.384 0.323 0.462
2 Insolences Take 3 65 0.446 1.92 0.3231 0.67 0.5469 129.9 0.545 29 238.38 0.65 0.43 1.42 2 0.12 0.335 0.328 0.289 0.345 0.289 0.276
2 CorruptedG Deception 28 0.357 2 0.2118 0.94 0.5556 123.4 0.481 10 256.43 0.64 0.61 1.61 3.04 0.14 0.346 0.286 0.34 0.391 0.385 0.4
2 Doomsee REUNITED 40 0.45 2.1 0.2475 0.68 0.5915 122.9 0.514 18 238.88 0.62 0.42 1.45 2.52 0.15 0.334 0.352 0.293 0.319 0.344 0.333
2 Jacob NRG Esports 56 0.589 2.07 0.2881 1.26 0.5746 122 0.524 33 232.59 0.61 0.77 1.21 2.11 0.12 0.313 0.254 0.418 0.291 0.274 0.212
2 ViolentPanda Mockit Aces 81 0.556 2.05 0.2197 0.96 0.5517 135.3 0.526 45 257.16 0.6 0.58 1.43 2.75 0.15 0.323 0.282 0.333 0.314 0.347 0.267
2 Rizzo Take 3 65 0.446 2 0.26 0.97 0.6016 114.5 0.497 29 230.23 0.6 0.58 1.46 2.31 0.17 0.324 0.305 0.392 0.356 0.333 0.379
2 Sikii Precision Z 55 0.455 1.95 0.2115 0.97 0.6075 125.4 0.494 25 253.82 0.6 0.58 1.65 2.84 0.11 0.338 0.308 0.376 0.354 0.35 0.24
2 Snaski REUNITED 40 0.45 1.73 0.2474 0.75 0.5915 137.6 0.536 18 256.5 0.6 0.45 1.65 2.42 0.23 0.359 0.338 0.31 0.363 0.33 0.5
2 Dadooh Red Eye 41 0.463 1.98 0.2162 1 0.5783 116.5 0.504 19 230.85 0.59 0.59 1.2 2.71 0.12 0.321 0.289 0.4 0.257 0.38 0.263
2 Flarke Summit 24 0.208 2 0.3043 0.43 0.5128 114.8 0.535 5 214.38 0.58 0.25 1.42 1.92 0.08 0.338 0.359 0.207 0.337 0.331 0.4
2 Skyline Precision Z 55 0.455 2.25 0.2385 1.03 0.5888 123 0.52 25 236.64 0.56 0.58 1.42 2.36 0.09 0.315 0.29 0.376 0.303 0.291 0.2
2 Fireworks Deception 18 0.333 2.39 0.2632 0.6 0.4571 97.8 0.495 6 197.5 0.56 0.33 1.28 2.11 0 0.278 0.286 0.231 0.315 0.268 0
2 JHZER FlipSid3 Tactics 9 0.667 2.56 0.2083 0.6 0.4211 124.4 0.532 6 233.89 0.56 0.33 1.33 2.67 0.11 0.271 0.263 0.231 0.267 0.282 0.167
2 0ver Zer0 G2 Esports 29 0.414 2.14 0.2162 1 0.6038 115.3 0.522 12 220.86 0.55 0.55 1.03 2.55 0.14 0.318 0.302 0.421 0.233 0.33 0.333
2 Moses Orbit 49 0.551 2.2 0.2389 1.07 0.5091 112.3 0.513 27 218.88 0.55 0.59 1.18 2.31 0.12 0.297 0.246 0.367 0.302 0.297 0.222
2 ELMP REUNITED 40 0.45 2.17 0.2292 1.05 0.6338 105.5 0.48 18 219.62 0.55 0.57 1.45 2.4 0.07 0.307 0.31 0.397 0.319 0.326 0.167
2 Lachinio G2 Esports 29 0.414 2.31 0.2029 0.79 0.4717 100.9 0.479 12 210.69 0.48 0.38 1.62 2.38 0.1 0.303 0.264 0.289 0.364 0.308 0.25
2 Pluto Genesis 53 0.547 2.15 0.2632 1.12 0.5408 121.3 0.56 29 216.6 0.47 0.53 1.26 1.79 0.13 0.311 0.255 0.389 0.344 0.26 0.241
2 miztik Northern Gaming 57 0.544 2.32 0.197 1.42 0.4961 120.4 0.537 31 223.95 0.46 0.65 1.19 2.32 0.11 0.304 0.205 0.39 0.329 0.289 0.194
2 Klassux Genesis 53 0.547 2.13 0.2069 1.17 0.5306 123.8 0.562 29 220.28 0.45 0.53 1.11 2.19 0.09 0.316 0.245 0.389 0.303 0.318 0.172
2 al0t OhMyDog 28 0.393 2.07 0.2353 1 0.5714 110.9 0.538 11 206.07 0.43 0.43 1.43 1.82 0.07 0.3 0.286 0.364 0.318 0.268 0.182
2 Dogu OhMyDog 28 0.393 2.32 0.1833 1.27 0.5952 98 0.514 11 190.89 0.39 0.5 1.14 2.14 0 0.278 0.262 0.424 0.254 0.316 0
2 Jessie Summit 24 0.208 2.21 0.1304 2.17 0.4872 105.6 0.563 5 187.5 0.25 0.54 1.08 1.92 0.04 0.296 0.154 0.448 0.257 0.331 0.2
2 Karma Vendetta 4 0.25 2.25 0.0833 1 0.4 82.5 0.5 1 165 0.25 0.25 0.75 3 0 0.283 0.2 0.25 0.25 0.375 0
3 Matt Rogue 50 0.5 1.74 0.3219 0.68 0.681 147.2 0.507 25 290.5 0.94 0.64 1.46 2.92 0.24 0.373 0.405 0.352 0.332 0.371 0.48
3 Dappur Selfless Gaming 48 0.5 1.75 0.3383 0.49 0.6837 117.9 0.451 24 261.56 0.94 0.46 1.75 2.77 0.25 0.36 0.459 0.328 0.385 0.382 0.5
3 Nielskoek Cow Nose 29 0.345 1.97 0.3171 0.42 0.74 117.6 0.481 10 244.48 0.9 0.38 1.21 2.83 0.24 0.356 0.52 0.306 0.285 0.391 0.7
3 Fireburner NRG Esports 55 0.673 2.09 0.2909 0.75 0.6269 111.7 0.454 37 246.27 0.87 0.65 1.18 3 0.2 0.315 0.358 0.356 0.299 0.342 0.297
3 JKnaps G2 Esports 34 0.5 1.71 0.3043 0.86 0.7324 156 0.539 17 289.26 0.82 0.71 1.35 2.71 0.24 0.378 0.394 0.436 0.315 0.333 0.471
3 Kronovi G2 Esports 34 0.5 2.09 0.2857 0.54 0.6056 116.6 0.489 17 238.53 0.82 0.44 1.06 2.88 0.18 0.312 0.394 0.273 0.247 0.355 0.353
3 Kaydop Mock-It eSports 79 0.544 1.92 0.2795 0.62 0.6887 131.8 0.478 43 275.95 0.81 0.51 1.86 2.9 0.24 0.36 0.424 0.333 0.398 0.37 0.442
3 kuxir97 FlipSid3 Tactics 66 0.515 1.91 0.2704 0.62 0.6056 137.3 0.511 34 268.56 0.8 0.5 1.42 2.97 0.18 0.343 0.373 0.306 0.338 0.352 0.353
3 Maestro Northern Gaming 37 0.622 2.24 0.2566 0.48 0.5513 126.4 0.492 23 256.62 0.78 0.38 1.43 3.05 0.16 0.311 0.372 0.237 0.319 0.352 0.261
3 GarrettG NRG Esports 55 0.673 1.82 0.2337 0.65 0.5299 141.5 0.519 37 272.55 0.78 0.51 1.16 3.35 0.25 0.349 0.321 0.277 0.295 0.381 0.378
3 Jacob NRG Esports 55 0.673 2.09 0.3209 0.86 0.597 129.9 0.495 37 262.36 0.78 0.67 1.6 2.44 0.24 0.336 0.321 0.366 0.406 0.277 0.351
3 Ferra The Leftovers 64 0.516 2.25 0.2924 0.68 0.6316 109.1 0.463 33 235.94 0.78 0.53 1.38 2.67 0.19 0.318 0.376 0.33 0.302 0.357 0.364
3 Turbopolsa Northern Gaming 40 0.65 1.95 0.2627 0.87 0.6591 129 0.479 26 269.5 0.78 0.68 1.62 2.95 0.17 0.347 0.352 0.415 0.389 0.334 0.269
3 Metsanauris Resonant Esports 38 0.421 2.18 0.3021 0.52 0.6377 127.5 0.528 16 241.71 0.76 0.39 1.13 2.53 0.18 0.322 0.42 0.278 0.281 0.324 0.438
3 CorruptedG Denial Esports 59 0.458 1.93 0.3333 0.49 0.6381 120.3 0.506 27 237.63 0.76 0.37 1.42 2.29 0.12 0.345 0.429 0.306 0.343 0.318 0.259
3 Killerno7 PENTA Sports 31 0.452 2.32 0.2875 0.39 0.5614 116.5 0.517 14 225.32 0.74 0.29 1.03 2.58 0.1 0.293 0.404 0.196 0.211 0.336 0.214
3 remkoe Northern Gaming 77 0.636 1.96 0.2511 0.68 0.5783 134.5 0.511 49 263.18 0.74 0.51 1.39 2.95 0.23 0.329 0.343 0.314 0.321 0.337 0.367
3 Chrome Genesis 33 0.485 2.03 0.3158 0.88 0.6923 120.3 0.481 16 250.3 0.73 0.64 1.73 2.3 0.15 0.326 0.369 0.438 0.345 0.328 0.312
3 Insolences Genesis 33 0.485 1.91 0.3243 0.71 0.6308 152.6 0.548 16 278.64 0.73 0.52 1.73 2.24 0.21 0.363 0.369 0.354 0.345 0.319 0.438
3 Pwndx PENTA Sports 22 0.5 1.95 0.2759 0.81 0.6744 140 0.526 11 265.91 0.73 0.59 1.41 2.64 0.23 0.339 0.372 0.371 0.301 0.335 0.455
3 Mijo Selfless Gaming 56 0.5 1.88 0.2878 0.6 0.5818 132.1 0.521 28 253.21 0.71 0.43 1.5 2.48 0.18 0.347 0.364 0.308 0.347 0.344 0.357
3 Markydooda FlipSid3 Tactics 66 0.515 2.3 0.25 0.77 0.5845 115.4 0.483 34 238.79 0.71 0.55 1.26 2.85 0.11 0.305 0.331 0.333 0.299 0.338 0.206
3 Turtle Rogue 50 0.5 2.34 0.2734 0.83 0.5517 111.2 0.486 25 228.6 0.7 0.58 1.2 2.56 0.1 0.293 0.302 0.319 0.273 0.325 0.2
3 Sizz Rogue 50 0.5 1.92 0.2833 0.88 0.5517 131.6 0.506 25 260.1 0.68 0.6 1.74 2.4 0.14 0.334 0.293 0.33 0.396 0.305 0.28
3 Espeon Take 3 27 0.444 1.96 0.2308 0.78 0.7442 114.8 0.494 12 232.22 0.67 0.52 1.11 2.89 0.11 0.34 0.419 0.424 0.27 0.417 0.25
3 Snaski The Leftovers 64 0.516 1.92 0.2781 0.79 0.5639 129.7 0.517 33 250.62 0.66 0.52 1.59 2.36 0.17 0.337 0.316 0.32 0.35 0.315 0.333
3 Sikii The Leftovers 64 0.516 1.83 0.2611 0.88 0.5789 134.1 0.523 33 256.48 0.64 0.56 1.58 2.45 0.16 0.345 0.308 0.349 0.347 0.328 0.303
3 Deevo Northern Gaming 77 0.636 1.95 0.2269 0.9 0.5602 149.9 0.549 49 273.12 0.64 0.57 1.4 2.81 0.22 0.342 0.295 0.355 0.324 0.32 0.347
3 gReazy FlipSid3 Tactics 66 0.515 1.79 0.2442 0.93 0.5704 149.8 0.547 34 273.71 0.64 0.59 1.53 2.61 0.24 0.35 0.296 0.361 0.363 0.309 0.471
3 ViolentPanda Gale Force 35 0.514 1.71 0.2391 1.14 0.7581 156.7 0.55 18 284.71 0.63 0.71 1.57 2.63 0.23 0.38 0.355 0.481 0.346 0.364 0.444
3 Lethamyr Denial Esports 59 0.458 1.88 0.2222 0.53 0.5238 129.2 0.537 27 240.76 0.61 0.32 1.27 2.75 0.25 0.35 0.343 0.264 0.306 0.382 0.556
3 al0t Resonant Esports 38 0.421 2.16 0.2473 0.65 0.5507 122.7 0.532 16 230.47 0.61 0.39 1.24 2.45 0.05 0.307 0.333 0.278 0.307 0.314 0.125
3 miztik Mock-It eSports 79 0.544 1.91 0.2249 0.89 0.5894 136.2 0.535 43 254.68 0.59 0.53 1.43 2.65 0.22 0.332 0.311 0.35 0.306 0.338 0.395
3 Chausette45 Gale Force 35 0.514 2.09 0.2299 0.65 0.5323 115.4 0.496 18 232.71 0.57 0.37 1.69 2.49 0.09 0.311 0.323 0.25 0.371 0.344 0.167
3 paschy90 Gale Force 35 0.514 2.2 0.2703 0.7 0.5484 128.6 0.557 18 231 0.57 0.4 1.29 2.11 0.2 0.309 0.323 0.269 0.283 0.292 0.389
3 Vince Take 3 27 0.444 1.74 0.2239 0.67 0.5814 128.5 0.53 12 242.59 0.56 0.37 1.59 2.48 0.22 0.355 0.349 0.303 0.387 0.358 0.5
3 Klassux Genesis 33 0.485 2.06 0.2073 0.59 0.4154 128.9 0.541 16 238.18 0.52 0.3 1.55 2.48 0.15 0.311 0.262 0.208 0.309 0.353 0.312
3 Fairy Peak Mock-It eSports 79 0.544 2.16 0.221 0.95 0.5166 130.3 0.549 43 237.15 0.51 0.48 1.41 2.29 0.1 0.309 0.265 0.317 0.301 0.292 0.186
3 FreaKii PENTA Sports 31 0.452 1.65 0.1707 1.5 0.614 151.9 0.525 14 289.19 0.45 0.68 2.32 2.65 0.19 0.377 0.246 0.456 0.474 0.344 0.429
3 DanzhizzLe Cow Nose 29 0.345 2.03 0.197 0.92 0.5 110.3 0.528 10 209.14 0.45 0.41 1.28 2.28 0 0.304 0.26 0.333 0.301 0.314 0
3 Mognus Resonant Esports 38 0.421 1.66 0.1589 1.41 0.5942 156.8 0.563 16 278.68 0.45 0.63 1.66 2.82 0.13 0.371 0.246 0.444 0.412 0.361 0.312
3 MummiSnow PENTA Sports 9 0.333 2.22 0.2222 0.75 0.5 114.4 0.515 3 222.22 0.44 0.33 1.89 2 0 0.306 0.286 0.273 0.347 0.277 0
3 Rizzo G2 Esports 34 0.5 2.21 0.1744 1.07 0.4366 118.2 0.499 17 237.06 0.44 0.47 1.88 2.53 0.09 0.31 0.211 0.291 0.438 0.312 0.176
3 Halcyon SetToDestroyX 25 0.16 2 0.2037 0.64 0.6923 108.4 0.532 4 203.8 0.44 0.28 1.36 2.16 0.04 0.32 0.423 0.389 0.256 0.409 0.25
3 Timi Selfless Gaming 56 0.5 2.29 0.1933 1.13 0.4455 127.7 0.576 28 221.61 0.41 0.46 1.2 2.12 0.12 0.304 0.209 0.333 0.277 0.295 0.25
3 SadJunior Denial Esports 59 0.458 2.19 0.189 1.29 0.5238 107.8 0.513 27 210 0.41 0.53 1.46 2.15 0.07 0.305 0.229 0.431 0.351 0.299 0.148
3 Zensuz Cow Nose 29 0.345 2 0.1774 1.18 0.48 127.2 0.545 10 233.45 0.38 0.45 1.76 2.14 0.1 0.34 0.22 0.361 0.415 0.295 0.3
3 Zanejackey Take 3 27 0.444 2.3 0.2381 0.9 0.4419 123 0.59 12 208.33 0.37 0.33 1.41 1.56 0.11 0.305 0.233 0.273 0.342 0.225 0.25
3 Lemonpuppy SetToDestroyX 25 0.16 2.24 0.2308 0.33 0.4615 112.2 0.589 4 190.6 0.36 0.12 1.36 1.56 0 0.3 0.346 0.167 0.256 0.295 0
3 Memory SetToDestroyX 19 0.211 1.53 0.1563 1.6 0.5652 151.1 0.555 4 272.37 0.26 0.42 2.89 1.68 0.16 0.402 0.217 0.5 0.534 0.291 0.75
3 Pluto Selfless Gaming 8 0.5 2.38 0.1538 3 0.6667 131.9 0.63 4 209.38 0.25 0.75 0.88 1.62 0 0.28 0.167 0.545 0.292 0.232 0
3 ColemanA SetToDestroyX 6 0 2.5 0.1429 0 0.3333 77.5 0.534 0 145 0.17 0 1.67 1.17 0 0.286 0.333 0 0.333 0.318 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment