// noprotect var diameter = 960; var tree = d3.layout.tree() .size([360, diameter / 2]) .separation(function(a, b) { return (a.parent == b.parent ? 1 : 2) / a.depth; }); var svg = d3.select("body").append("svg") .attr('viewBox', -diameter/2 + " " + (-diameter/2) + " " + diameter + " " + diameter) var zoomable_layer = svg.append('g'); zoom = d3.behavior.zoom() .scaleExtent([0.5,4]) .on('zoom', function() { zoomable_layer .attr('transform', "translate(" + zoom.translate() + ")scale(" + zoom.scale() + ")"); }); svg.call(zoom); var diagonal = d3.svg.diagonal.radial() .projection(function(d) { return [d.y, d.x / 180 * Math.PI]; }); d3.json("weighted_ontology.json", function(error, root) { d3.json("node_link_ontology.json", function(error, graph) { var thickness = d3.scale.sqrt() .domain([1, d3.max(graph.links, function(d) {return d.value;})]) .range([0.1, 10]); nodeID2Label = {}; graph.nodes.forEach(function(d) { nodeID2Label[d.id] = d.name; }); var nodes = tree.nodes(root); var node = zoomable_layer.selectAll(".node") .data(nodes) .enter().append("g") .attr("class", "node") .attr("transform", function(d) { return "rotate(" + (d.x - 90) + ")translate(" + d.y + ")"; }); node.append("circle") .attr("r", 2.5); node.append("title") .text(function(d) { return d.name; }); for (i = 0; i < graph.links.length; i++) { for (j = 0; j < nodes.length; j++) { if (nodeID2Label[graph.links[i].source] == nodes[j].name.replace("http://dbpedia.org/ontology/", "")) { graph.links[i].source = nodes[j]; } if (nodeID2Label[graph.links[i].target] == nodes[j].name.replace("http://dbpedia.org/ontology/", "")) graph.links[i].target = nodes[j]; } } var links = tree.links(nodes); var link = zoomable_layer.selectAll(".link") .data(graph.links) .enter().insert("path", ".node") .attr("class", "link") .attr("stroke-width", function(d) {return thickness(d.value);}) .attr("d", diagonal); link.append("title") .text(function(d) { return d.source.name.replace("http://dbpedia.org/ontology/", "") + " -> " + d.target.name.replace("http://dbpedia.org/ontology/", "") + " = " + d.value; }); }); }); d3.select(self.frameElement).style("height", diameter + "px");