1 var weapons = ["laser", "shotgun", "uzi", "grenadelauncher", "electro", "crylink",
2 "nex", "hagar", "rocketlauncher", "minstanex", "rifle", "fireball",
3 "minelayer", "seeker", "tuba", "hlac", "hook", "porto"];
5 var drawDamageChart = function(data) {
6 // the chart should fill the "damageChart" div
7 var width = document.getElementById("damageChart").offsetWidth;
9 // transform the dataset into something nvd3 can use
10 var transformedData = d3.nest()
11 .key(function(d) { return d.weapon_cd; }).entries(data.weapon_stats);
13 // transform games list into a map such that games[game_id] = linear sequence
15 data.games.forEach(function(v,i){ games[v] = i; });
18 var margin = {top: 20, right: 30, bottom: 30, left: 60},
19 height = 300 - margin.top - margin.bottom;
21 width -= margin.left - margin.right;
24 var colors = d3.scale.category20().domain(weapons);
25 keyColor = function(d, i) {return colors(d.key)};
28 nv.addGraph(function() {
29 chart = nv.models.stackedAreaChart()
33 .x(function(d) { return games[d.game_id] })
34 .y(function(d) { return d.actual })
35 .tooltip(function(key, x, y, e, graph) {
36 return '<h3>' + key + '</h3>' + '<p>' + y + ' damage in game #' + x + '</p>'
44 .tickFormat(function(d) { return data.games[d]; });
47 .tickFormat(d3.format(',02d'));
49 d3.select('#damageChartSVG')
50 .datum(transformedData)
51 .transition().duration(500).call(chart);
53 nv.utils.windowResize(chart.update);
59 var drawAccuracyChart = function(data) {
60 // the chart should fill the "accuracyChart" div
61 var width = document.getElementById("accuracyChart").offsetWidth;
63 // get rid of empty values
64 data.weapon_stats = data.weapon_stats.filter(function(e){ return e.fired > 0; });
66 // transform the dataset into something nvd3 can use
67 var transformedData = d3.nest()
68 .key(function(d) { return d.weapon_cd; }).entries(data.weapon_stats);
70 // transform games list into a map such that games[game_id] = linear sequence
72 data.games.forEach(function(v,i){ games[v] = i; });
75 var margin = {top: 20, right: 30, bottom: 30, left: 40},
76 height = 300 - margin.top - margin.bottom;
78 width -= margin.left - margin.right;
81 var colors = d3.scale.category20().domain(weapons);
82 keyColor = function(d, i) {return colors(d.key)};
85 nv.addGraph(function() {
86 chart = nv.models.lineChart()
91 .x(function(d) { return games[d.game_id] })
99 .tooltip(function(key, x, y, e, graph) {
100 return '<h3>' + key + '</h3>' + '<p>' + y + ' accuracy in game #' + x + ' <br /> ' + data.averages[key] + '% average</p>';
105 .axisLabel("Game ID")
108 .tickFormat(function(d) { return data.games[d]; });
110 var yScale = d3.scale.linear().domain([0,1]).range([0,height]);
112 .axisLabel('% Accuracy')
113 .tickFormat(d3.format('2%'));
115 d3.select('#accuracyChartSVG')
116 .datum(transformedData)
117 .transition().duration(500).call(chart);
119 nv.utils.windowResize(chart.update);