Skip to content

Instantly share code, notes, and snippets.

@BTKY
Last active September 23, 2017 10:24
Show Gist options
  • Save BTKY/d56597b06e73787ce1f525965b515d3b to your computer and use it in GitHub Desktop.
Save BTKY/d56597b06e73787ce1f525965b515d3b to your computer and use it in GitHub Desktop.
Basic Directional Force Layout Diagram with Random values
license: mit

This is an adaption of two of Mike Bostock's force layout examples (Mobile Patent Suits and Force-Directed Graph with Mouseover).

This particular graph is intended as a 'basic' example of a directional force layout graph (hence the arrows) and I intend to add additional examples with variations.

forked from d3noob's block: Basic Directional Force Layout Diagram

forked from anonymous's block: Basic Directional Force Layout Diagram

forked from anonymous's block: Basic Directional Force Layout Diagram

forked from anonymous's block: Basic Directional Force Layout Diagram

forked from anonymous's block: Basic Directional Force Layout Diagram

forked from anonymous's block: Basic Directional Force Layout Diagram

forked from anonymous's block: Basic Directional Force Layout Diagram

{"nodes":[{"name":"regering","value":"237"},{"name":"soldier","value":"259"},{"name":"film","value":"179"},{"name":"army","value":"179"},{"name":"woman","value":"156"},{"name":"department","value":"120"},{"name":"magazines","value":"116"},{"name":"embassy","value":"111"},{"name":"people","value":"109"},{"name":"lady","value":"106"},{"name":"dollar","value":"103"},{"name":"troops","value":"98"},{"name":"soldiers","value":"90"},{"name":"report","value":"80"},{"name":"CULTURE","value":"200"},{"name":"secretary","value":"77"},{"name":"market","value":"71"},{"name":"authorities","value":"66"},{"name":"air force","value":"66"},{"name":"navy","value":"63"},{"name":"research","value":"56"},{"name":"congress","value":"52"},{"name":"tourists","value":"51"},{"name":"show","value":"50"},{"name":"envoy","value":"47"},{"name":"public","value":"46"},{"name":"senate","value":"42"},{"name":"president","value":"41"},{"name":"zone","value":"40"},{"name":"auto","value":"39"},{"name":"pilots","value":"39"},{"name":"trusts","value":"37"},{"name":"flag","value":"33"},{"name":"press","value":"31"},{"name":"petrol","value":"30"},{"name":"way","value":"28"},{"name":"television","value":"27"},{"name":"men","value":"26"},{"name":"concern","value":"25"},{"name":"newspapers","value":"25"},{"name":"novel","value":"25"},{"name":"fleet","value":"25"},{"name":"consul","value":"24"},{"name":"officers","value":"24"},{"name":"author","value":"24"},{"name":"railroads","value":"24"},{"name":"tobacco industry","value":"24"},{"name":"side","value":"24"},{"name":"scientists","value":"22"},{"name":"firm","value":"21"},{"name":"industry","value":"21"},{"name":"corporation","value":"21"},{"name":"origin","value":"21"},{"name":"tanks","value":"21"},{"name":"doctor","value":"20"},{"name":"banks","value":"20"},{"name":"citizens","value":"20"},{"name":"girl","value":"20"},{"name":"American","value":""},{"name":"prisoners of war","value":"20"},{"name":"medical","value":"20"},{"name":"treasury","value":"20"},{"name":"tobacco trust","value":"20"},{"name":"MILITARY","value":"200"},{"name":"GENDER","value":"200"},{"name":"MEDIA","value":"200"},{"name":"TRADE","value":"200"},{"name":"GOVERNMENT","value":"200"},{"name":"SCIENCE","value":"200"}],"links":[{"source":67,"target":0},{"source":63,"target":1},{"source":65,"target":2},{"source":63,"target":3},{"source":64,"target":4},{"source":67,"target":5},{"source":65,"target":6},{"source":67,"target":7},{"source":14,"target":8},{"source":64,"target":9},{"source":66,"target":10},{"source":63,"target":11},{"source":63,"target":12},{"source":68,"target":13},{"source":67,"target":15},{"source":66,"target":16},{"source":67,"target":17},{"source":63,"target":18},{"source":63,"target":19},{"source":68,"target":20},{"source":67,"target":21},{"source":14,"target":22},{"source":65,"target":23},{"source":63,"target":24},{"source":14,"target":25},{"source":67,"target":26},{"source":67,"target":27},{"source":63,"target":28},{"source":66,"target":29},{"source":63,"target":30},{"source":66,"target":31},{"source":14,"target":32},{"source":65,"target":33},{"source":66,"target":34},{"source":14,"target":35},{"source":65,"target":36},{"source":64,"target":37},{"source":66,"target":38},{"source":65,"target":39},{"source":14,"target":40},{"source":63,"target":41},{"source":67,"target":42},{"source":63,"target":43},{"source":65,"target":44},{"source":66,"target":45},{"source":66,"target":46},{"source":63,"target":47},{"source":68,"target":48},{"source":66,"target":49},{"source":66,"target":50},{"source":66,"target":51},{"source":14,"target":52},{"source":63,"target":53},{"source":68,"target":54},{"source":66,"target":55},{"source":14,"target":56},{"source":64,"target":57},{"source":64,"target":58},{"source":63,"target":59},{"source":68,"target":60},{"source":66,"target":61},{"source":66,"target":62}]}
<!DOCTYPE html>
<meta charset="utf-8">
<script src="http://d3js.org/d3.v3.js"></script>
<style>
path.link {
fill: none;
stroke: #666;
stroke-width: 1.5px;
}
circle {
fill: #ccc;
stroke: #fff;
stroke-width: 1.5px;
}
text {
fill: #000;
font: 10px sans-serif;
pointer-events: none;
}
</style>
<body>
<script>
// get the data
d3.json("consumption-fig3-tree.json", function(error, links) {
var nodes = links.nodes;
var links = links.links;
var width = 960,
height = 500;
var force = d3.layout.force()
.nodes(d3.values(nodes))
.links(links)
.size([width, height])
.linkDistance(60)
.charge(-300)
.on("tick", tick)
.start();
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
// build the arrow.
svg.append("svg:defs").selectAll("path")
.data(["end"]) // Different link/path types can be defined here
.enter()
.append("svg:path")
.attr("d", "M0,-5L10,0L0,5");
// add the links and the arrows
var path = svg.append("svg:g").selectAll("path")
.data(force.links())
.enter().append("svg:path")
// .attr("class", function(d) { return "link " + d.type; })
.attr("class", "link")
.attr("marker-end", "url(#end)");
// define the nodes
var node = svg.selectAll(".node")
.data(force.nodes())
.enter().append("g")
.attr("class", "node")
.call(force.drag);
// add the nodes
node.append("circle")
.attr("r", function(d) {
return (d.value+.1) * 30;
});
// add the text
node.append("text")
.attr("dy", ".35em")
.text(function(d) { return d.name; });
// add the curvy lines
function tick() {
path.attr("d", function(d) {
var dx = d.target.x - d.source.x,
dy = d.target.y - d.source.y,
dr = Math.sqrt(dx * dx + dy * dy);
return "M" +
d.source.x + "," +
d.source.y + "A" +
dr + "," + dr + " 0 0,1 " +
d.target.x + "," +
d.target.y;
});
node
.attr("transform", function(d) {
return "translate(" + d.x + "," + d.y + ")"; });
}
});
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment