Skip to content

Instantly share code, notes, and snippets.

@allenday
Forked from mbostock/.block
Last active January 25, 2019 09:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save allenday/f7181b91f33a8fdb884f28c71516dfbb to your computer and use it in GitHub Desktop.
Save allenday/f7181b91f33a8fdb884f28c71516dfbb to your computer and use it in GitHub Desktop.
Force Layout from CSV
license: gpl-3.0
source target
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0xe784b7f6ed5c5fca85781cfa80781cfba94e7471
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x6676cbbf05223de16f7ebf3f79a2cc9dfea13cf9
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x68e1eaa51b92354af2c319e13b264bf0368b6c43
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0xf95393a61b6c87d54a0aeeb673f1dcf73b636d85
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0xe52cc6f18539947043eeae39dabf33f1451a23e9
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x92d4b09cd6f32918fa7614dae45227193cc25a4e
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0xc0140d5a4a8a33328c798d2251094dcf939c407f
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0xb3e405db2d56d53f690975876e5cfae76b2f8824
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x768fe4f1da90449f3d95bcc5efa9e344bfc5614b
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x3d798761b43beeca9b8fc9023456771156c4a4d3
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0xd9f298700425d4d9f8e00f6962863479f3f121fe
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x02299cdc9475b23f4a045c5936570c1899759c4f
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0xe35081b5d5164d2d8008d0c64fed31e53feaf633
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0xc122ae582cfb8094c65f79221a65942adf157f81
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0xf6506c6a03deee7fcafb1763c3598b6bb5c3146a
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x336b519ff483b4fd34ba1d81292502bd758ae948
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x87aa92a1bcc1f386e9da2e558d919b36956e4942
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x152e1d8a20c3c9ef85e9cbc5d2f9b6a6a322d18f
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0xea78a82bdbb8b6328b7ff5036d72ccf5ba080cee
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x2afa6b572c12562321a244f5f03358bb4086436b
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x63cee5201cbb438f592e023bb9543841f1f09b68
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x279060850a58f4bb31877d9853f1fa7d9ac00ead
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x2154151282fd2c58336946be661bfaddf872d30f
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x3dfe49e458f7058dbd53e8559b25dd6f3938ae6d
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0xc6c8cbdc99a8ad06baab40006893ff2ee171089b
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0xeb2f1b19ec93e3d41d2a9a2e0c9a07785dc8f6d5
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0xa4972ab11037e3e4d54a5c1b09efb1af02e06022
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x5f7e2de30b88fd974047316301e0dde11c34a803
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0xebc800a440594437d4a18f7880badc92049338b2
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x55e9771f2028808ebeff8abb3e20e2c493ce9aa7
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x14ee0f1a617b0e98cdb3d2475277ba189880a5bc
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0xf27b52d167dabbe0af27c779273ebe8047a88d6f
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x50e0b952513f9faf0a681c4618f83b3fae639c6a
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x7cc40912dcbf587af835c0fcbbe48aeb2c37078e
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x136816e46d5a026164ad7a0cc529a68de0a67f7a
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x52195c59e56bce339b5dc0f317721886ff3fbe28
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x390ae18ce688ef4f8ad58332d90adab2c2cec754
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x20636cb7f248572d8791b3b64bb85c35e1cffb67
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x158e68cb48aae00d1a75762c49ec402887828c0e
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x6dcf16bda997f3992b518259ca4b41c0db1c59f1
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x2c09d4bc375a07cd210831aacb0d95ee1fc84706
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x0e4d72d9d0531d6ede0e007ab332e38565f9341b
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0xdfd535da17a60e8189a63484d0660eb7a9bb5d51
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0xa98cbfa5d7708582e1ce4162d5e53fd1c75f187f
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0xcb602ee226f755bf92f6de5d474b69e58761b5cb
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x7a57aed3866e3650692b152741ec407a776494f3
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0xff0a07f8500f206e145614e713925af50bcd80c3
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x193b1835df7e5f3253fbf8b94711409773131c93
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x0e89464fca467d0b6d32c814478bdb5098bec289
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x17205c65d4b027de55c96bbf1eb212c281bb66ce
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x59af6906606724a185d5223b2fb4825bc9110970
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x9740715d65ade931b5216b6888e22219d3441830
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0xb83bba18bfada20c02cef62d4e448fe0a39fc634
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0xb43f0157edfdc3af3002b7fb21493abdf6a055fd
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x41db2b1f78d5017f033bf6a1cf41e4adbb81017b
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x1c1e26c7bb9a7fda2bd52d4c80b61c318b5d943a
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x3d27d554661a8b18d203d3ebca3f6758b4a90174
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x6d35c3e8d652cf517ecaa2b9b56e7b6758d045a4
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x99ca3baaee93d47f73eb6bbfba0819acdd6133c0
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x3e315fbba79b5127b0861c02527fb470d09f69d2
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x6b22f32c94f3edd8f0eedb189a1037b80453c559
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x8bc9142cb8bc7b4a97816122a97cb4f415213d9f
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x5d40f5d030692fad5b9f700823f296006760ddd1
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x7fa914629011b1aa4825646d2fa7d607d60d7203
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0xfe8c0c984c2ad1c26c08512ed1a5852ffe357743
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x64fb34fcd0c2f450c9997f1a2686fc70d7a9efb8
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x68cdee619222bf58f2735361e4071a5257309c03
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x76d7c70f48eb0214723106eb3a889efc85e9e91d
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x26876db8b26414d497e6a6d93f43214df2086dfa
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x1f086f0c1a1e91d306d9ce3663643f989a719761
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x7be454c927b5545848c402662368af91f3af7321
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0xa962a730c0988c12a6dd96f8cbf77825bf402ad5
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0xdd7839d27a05549923f69cded80350821573ce78
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x7f8fd2285c1037aad0d9d2b6fa50331a24f6fe62
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x68336074e88de35d80a5ba413c499c284a42e58c
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x88b5fe7e074d8ba72ef22f40d825a624ffed05b0
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x4d8caa973d84a9b2eda231408584a9f11f5cd97c
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0xbc0c0d80b9442d1e9eb289d493ad44ee19ca075c
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x7af8a9f597dbf5aeba96a2eb3c73ab71bac4761a
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x5fd599597ef23ca81365dca05ce65a53fcc09a87
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x59292f9b07a353993e1f281f905d545c331e7348
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x6919b5b0094de0fb60f21e6c8cf982e129f13350
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x9e82e4bd9c3fd5c8e588dbd0282c023131a2caa1
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0xa333b29e3a13bfc9d3720e21292c2456c8928096
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x4bcbdde30f91a907d69e56d4610e35472ca5b922
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x3c5f8b2b93f334f69dce2019825d08e5a3f8b614
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0xd851436eccb957e9974befd5595dd7d1382d2724
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x83aeeb391e4bedc65cd02fd7b2081516841c54f1
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0xe17410e9864a32d29d47e369aadab9041d95563c
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x318539853cebb3d4a54d5e69854bbc863cdf6f37
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x1f4aa88663f0102caa1495fea4e5fb8fb55d0b12
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x742965d484ef14ed58db2bcec49618a55a84c7a3
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0xa71fe8e637387ce54acddcf78c22c05ec7009e00
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x5ca86163504cd152fa87a1ee781b8f63469f7f99
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x19d575042646736425756eb5545c60a477ce8344
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0xc076a3aba42f2719a8105a43b11f38ab2bd175fb
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x803158ffbb3454d9919fa53a1b56e39379bf3d62
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x6a7112be68da4a441ad5266f057354cf36fbcf37
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x9df1938f41833123e912a5cc73d36bb2641914cd
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x28f367d306c55706c0511c3ff5fe91411810649a
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x789005aa396557b9e8fd6f8f590d331a5d86d926
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x5d1f1b8570972b6e26302ac4073158ca13310540
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x1fc246ebd22342d61d5a773a863c2fb4a7da6e81
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x68451d5737bfbd37e2e67e1cd0b96d712b4c4c2c
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x66abe8439880568576740de23121636b54f51fe8
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x7e0f99c9d0dcee7991e7f1bfd9a6ff31f8de1a1c
0x0af5035a8dff53f5a89bfc083fdec94c7332ad7a 0x9780c30068c332424cc1c3abb25ca58ca83bc21e
<!DOCTYPE html>
<meta charset="utf-8">
<style>
.link {
stroke: #000;
}
.node {
stroke: #fff;
}
</style>
<body>
<script src="//d3js.org/d3.v3.min.js"></script>
<script>
var width = 960,
height = 500;
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
var force = d3.layout.force()
.size([width, height]);
d3.csv("graph.csv", function(error, links) {
if (error) throw error;
var nodesByName = {};
// Create nodes for each unique source and target.
links.forEach(function(link) {
link.source = nodeByName(link.source);
link.target = nodeByName(link.target);
});
// Extract the array of nodes from the map by name.
var nodes = d3.values(nodesByName);
// Create the link lines.
var link = svg.selectAll(".link")
.data(links)
.enter().append("line")
.attr("class", "link");
// Create the node circles.
var node = svg.selectAll(".node")
.data(nodes)
.enter().append("circle")
.attr("class", "node")
.attr("r", 4.5)
.call(force.drag);
// Start the force layout.
force
.nodes(nodes)
.links(links)
.on("tick", tick)
.start();
function tick() {
link.attr("x1", function(d) { return d.source.x; })
.attr("y1", function(d) { return d.source.y; })
.attr("x2", function(d) { return d.target.x; })
.attr("y2", function(d) { return d.target.y; });
node.attr("cx", function(d) { return d.x; })
.attr("cy", function(d) { return d.y; });
}
function nodeByName(name) {
return nodesByName[name] || (nodesByName[name] = {name: name});
}
});
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment