// 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 bundle = d3.layout.bundle(); var line = d3.svg.line.radial() .interpolate("bundle") .tension(0.85) .radius(function(d) { return distanceFromZero(d); }) .angle(function(d) { return d.x / 180 * Math.PI; }); function distanceFromZero(d) { if (d.depth === 0) return 0; else return (d.y * (1 / Math.sqrt(d.depth)) * 2); //return d.y; } d3.json("weighted_ontology.json", function(error, root) { d3.json("node_link_ontology.json", function(error, graph) { 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(" + distanceFromZero(d) + ")"; }); 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(bundle(graph.links)) .enter().insert("path", ".node") .attr("class", "link") .attr("stroke-width", 0.02) .attr("d", line); 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");