(function() { var DIAMETER, distance, graph_data, height, labels, link_thickness, links, links_layer, nodes, nodes_layer, polar, polar_layout, svg, width; graph_data = { nodes: [ { id: 'A', centrality: { eigenvector: 0.5128343 } }, { id: 'B', centrality: { eigenvector: 0.3408974 } }, { id: 'C', centrality: { eigenvector: 0.3216734 } }, { id: 'D', centrality: { eigenvector: 0.5535792 } }, { id: 'E', centrality: { eigenvector: 0.2333755 } }, { id: 'F', centrality: { eigenvector: 0.2680001 } }, { id: 'G', centrality: { eigenvector: 0.2908231 } } ], links: [ { source: 'A', target: 'B', weight: 12 }, { source: 'A', target: 'C', weight: 2 }, { source: 'A', target: 'D', weight: 33 }, { source: 'A', target: 'F', weight: 5 }, { source: 'A', target: 'G', weight: 24 }, { source: 'B', target: 'D', weight: 10 }, { source: 'B', target: 'E', weight: 10 }, { source: 'B', target: 'F', weight: 8 }, { source: 'B', target: 'G', weight: 16 }, { source: 'C', target: 'D', weight: 29 }, { source: 'C', target: 'E', weight: 11 }, { source: 'D', target: 'E', weight: 4 }, { source: 'D', target: 'F', weight: 12 }, { source: 'E', target: 'F', weight: 19 } ] }; graph_data.links.forEach(function(l) { return graph_data.nodes.forEach(function(n) { if (l.source === n.id) { l.source = n; } if (l.target === n.id) { return l.target = n; } }); }); svg = d3.select('svg'); width = svg.node().getBoundingClientRect().width; height = svg.node().getBoundingClientRect().height; svg.attr({ viewBox: "" + (-width / 2) + " " + (-height / 2) + " " + width + " " + height }); polar_layout = function() { var delta_theta, rho, self, theta, theta_0; rho = function(d, i, data) { return 100; }; theta_0 = function(d, i, data) { return -Math.PI / 2; }; delta_theta = function(d, i, data) { return 2 * Math.PI / data.length; }; theta = function(d, i, data) { return theta_0(d, i, data) + i * delta_theta(d, i, data); }; self = function(data) { data.forEach(function(d, i) { d.rho = rho(d, i, data); d.theta = theta(d, i, data); d.x = d.rho * Math.cos(d.theta); return d.y = d.rho * Math.sin(d.theta); }); return data; }; self.rho = function(x) { if (x != null) { if (typeof x === 'function') { rho = x; } else { rho = function() { return x; }; } return self; } return rho; }; self.theta_0 = function(x) { if (x != null) { if (typeof x === 'function') { theta_0 = x; } else { theta_0 = function() { return x; }; } return self; } return theta_0; }; self.delta_theta = function(x) { if (x != null) { if (typeof x === 'function') { delta_theta = x; } else { delta_theta = function() { return x; }; } return self; } return delta_theta; }; self.theta = function(x) { if (x != null) { if (typeof x === 'function') { theta = x; } else { theta = function() { return x; }; } return self; } return theta; }; return self; }; distance = d3.scale.linear().domain([0.1, 0.6]).range([330, 0]); polar = polar_layout().rho(function(node) { return distance(node.centrality.eigenvector); }); polar(graph_data.nodes); DIAMETER = 40; svg.append('circle').attr({ r: distance(0), fill: 'none', stroke: '#8AC' }); svg.append('circle').attr({ r: distance(0.1), fill: 'none', stroke: '#BDF' }); svg.append('circle').attr({ r: distance(0.2), fill: 'none', stroke: '#BDF' }); svg.append('circle').attr({ r: distance(0.3), fill: 'none', stroke: '#BDF' }); svg.append('circle').attr({ r: distance(0.4), fill: 'none', stroke: '#BDF' }); svg.append('circle').attr({ r: distance(0.5), fill: 'none', stroke: '#BDF' }); svg.append('circle').attr({ r: 4, fill: '#BDF' }); links_layer = svg.append('g'); nodes_layer = svg.append('g'); nodes = nodes_layer.selectAll('.node').data(graph_data.nodes); nodes.enter().append('circle').attr({ "class": 'node', r: DIAMETER / 2, cx: function(node) { return node.x; }, cy: function(node) { return node.y; } }); labels = nodes_layer.selectAll('.label').data(graph_data.nodes); labels.enter().append('text').text(function(node) { return node.id; }).attr({ "class": 'label', dy: '0.35em', x: function(node) { return node.x; }, y: function(node) { return node.y; } }); link_thickness = d3.scale.linear().domain([ 0, d3.max(graph_data.links, function(link) { return link.weight; }) ]).range([0, DIAMETER * 0.8]); links = links_layer.selectAll('.link').data(graph_data.links); links.enter().append('path').attr({ "class": 'link', d: function(link) { return "M" + link.source.x + " " + link.source.y + " L" + link.target.x + " " + link.target.y; }, 'stroke-width': function(link) { return link_thickness(link.weight); } }); }).call(this);