/** * A chart showing the current visitors (WiFi devices) on a (fake) radar chart */ /** Key by axis and calculate max value per axis, then flatten for radarChart */ function prepareRadarProbes(probeData) { var sumData = d3.nest().key(function(d) { return d.axis; }).rollup(function(v) { return { axis: v[0].axis, value: d3.max(v, function(d) { return d.value }), }; }).entries(probeData); var data = []; for(var i = 0; i < sumData.length; i++) data.push(sumData[i].values); return data; } function createUpdateRadarChart(activeClientsData) { var data = JSON.parse(JSON.stringify(activeClientsData)); // flatten into nested array data[0] = prepareRadarProbes(data[0].values || []); data[1] = prepareRadarProbes(data[1].values || []); data[2] = prepareRadarProbes(data[2].values || []); // The radar chart options var margin = {top: 70, right: 80, bottom: 80, left: 130}, width = Math.min(screenSize.height, window.innerWidth - 10) - margin.left - margin.right, height = Math.min(width, window.innerHeight - margin.top - margin.bottom - 20); var color = d3.scale.ordinal() .range(["#EDC951","#CC333F","#00A0B0"]); var radarChartOptions = { w: width, h: height, axis: radarAxis, margin: margin, minValue: 0,//Number.MAX_SAFE_INTEGER, // Will use the data min value if passing the int max value levels: 3, roundStrokes: true, color: color }; if(useFakeRadarData) data = fakeRadarData; //Call function to draw the Radar chart RadarChart(".radarChart", data, radarChartOptions); }