D3
OG
Old school D3 from simpler times
All examples
By author
By category
About
esuarezd
Full window
Github gist
productiveChainNetwork
Built with
blockbuilder.org
<!DOCTYPE html> <!-- En desarrollo basado en https://bl.ocks.org/mbostock/7607999 --> <meta charset="utf-8"> <h1>After USA, Italy and Japan are the most linked countries to Colombian Coffee </h1> <div>By <a href="https://github.com/esuarezd">Edison Alexis Suarez Ducon</a></div> <div>1. It is said that it is import to diversify the market and to have many providers. Well, USA imports from 16 differents departments in Colombia, and Italy and Japan imports from 15 diferents departments.</div> <div>2. the department who has more link to countries is Risaralda. It exports to 47 countries. After Risaralda, Antioquia links to 45 coutries</div> <div>The vis groups zones of countries. On each group, the vis sort, from left to right, the ountry who imports more coffee. Mouseover any of the nodes in this network to see the incoming links (importations) in green and the outgoing links (exportations) in red.</div> <div>See <a href="indexImports.html">SortByImports</a></div> <style> .node { font: 300 11px "Helvetica Neue", Helvetica, Arial, sans-serif; fill: #bbb; } .node:hover { fill: #000; } .link { stroke: steelblue; stroke-opacity: 0.4; fill: none; pointer-events: none; } .node:hover, .node--source, .node--target { font-weight: 700; } .node--source { fill: #2ca02c; } .node--target { fill: #d62728; } .link--source, .link--target { stroke-opacity: 1; stroke-width: 2px; } .link--source { stroke: #d62728; } .link--target { stroke: #2ca02c; } </style> <body> <script src="https://d3js.org/d3.v4.min.js"></script> <script> var diameter = 960, radius = diameter / 2, innerRadius = radius - 120; var cluster = d3.cluster() .size([360, innerRadius]); var line = d3.radialLine() .curve(d3.curveBundle.beta(0.85)) .radius(function(d) { return d.y; }) .angle(function(d) { return d.x / 180 * Math.PI; }); var svg = d3.select("body").append("svg") .attr("width", diameter) .attr("height", diameter) .append("g") .attr("transform", "translate(" + radius + "," + radius + ")"); var link = svg.append("g").selectAll(".link"), node = svg.append("g").selectAll(".node"); d3.json("flare2017size.json", function(error, classes) { if (error) throw error; var root = packageHierarchy(classes) .sum(function(d) { return d.size; }); cluster(root); link = link .data(packageImports(root.leaves())) .enter().append("path") .each(function(d) { d.source = d[0], d.target = d[d.length - 1]; }) .attr("class", "link") .attr("d", line); node = node .data(root.leaves()) .enter().append("text") .attr("class", "node") .attr("dy", "0.31em") .attr("transform", function(d) { return "rotate(" + (d.x - 90) + ")translate(" + (d.y + 8) + ",0)" + (d.x < 180 ? "" : "rotate(180)"); }) .attr("text-anchor", function(d) { return d.x < 180 ? "start" : "end"; }) .text(function(d) { return d.data.key; }) .on("mouseover", mouseovered) .on("mouseout", mouseouted); }); function mouseovered(d) { node .each(function(n) { n.target = n.source = false; }); link .classed("link--target", function(l) { if (l.target === d) return l.source.source = true; }) .classed("link--source", function(l) { if (l.source === d) return l.target.target = true; }) .filter(function(l) { return l.target === d || l.source === d; }) .raise(); node .classed("node--target", function(n) { return n.target; }) .classed("node--source", function(n) { return n.source; }); } function mouseouted(d) { link .classed("link--target", false) .classed("link--source", false); node .classed("node--target", false) .classed("node--source", false); } // Lazily construct the package hierarchy from class names. function packageHierarchy(classes) { var map = {}; function find(name, data) { var node = map[name], i; if (!node) { node = map[name] = data || {name: name, children: []}; if (name.length) { node.parent = find(name.substring(0, i = name.lastIndexOf("."))); node.parent.children.push(node); node.key = name.substring(i + 1); } } return node; } classes.forEach(function(d) { find(d.name, d); }); return d3.hierarchy(map[""]); } // Return a list of imports for the given array of nodes. function packageImports(nodes) { var map = {}, imports = []; // Compute a map from name to node. nodes.forEach(function(d) { map[d.data.name] = d; }); // For each import, construct a link from the source to target node. nodes.forEach(function(d) { if (d.data.imports) d.data.imports.forEach(function(i) { imports.push(map[d.data.name].path(map[i])); }); }); return imports; } </script>
https://d3js.org/d3.v4.min.js