A force directed graph with 3 foci for the nodes to cluster around.
Try it on bl.ocks.org
A force directed graph with 3 foci for the nodes to cluster around.
Try it on bl.ocks.org
<!DOCTYPE html> | |
<html> | |
<head> | |
<title>Olympic Medal Count</title> | |
<script type="text/javascript" src="http://d3js.org/d3.v2.js"></script> | |
<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.0.min.js"></script> | |
<style type="text/css"> | |
.gold { | |
fill: gold; | |
stroke: #aaa; | |
stroke-width: 1px; | |
} | |
.silver { | |
fill: silver; | |
stroke: #aaa; | |
stroke-width: 1px; | |
} | |
.bronze { | |
fill: darkgoldenrod; | |
stroke: #aaa; | |
stroke-width: 1px; | |
} | |
text { | |
font: 0.7em sans-serif; | |
} | |
</style> | |
</head> | |
<body> | |
<h1>2012 Olympic Medal Count</h1> | |
<script type="text/javascript"> | |
var w = 960, | |
h = 500, | |
nodes = [], | |
foci = [{x: 250, y: 180}, {x: 465, y: 180}, {x: 700, y: 180}]; | |
var vis = d3.select("body").append("svg:svg") | |
.attr("width", w) | |
.attr("height", h); | |
var force = d3.layout.force() | |
.nodes(nodes) | |
.links([]) | |
.gravity(0.11) | |
.friction(0.85) | |
.charge(-60) | |
.size([w, h]); | |
var scale = d3.scale.linear() | |
.domain([0,40]) | |
.range([10, 50]); | |
force.on("tick", function(e) { | |
// Push nodes toward their designated focus. | |
var k = .1 * e.alpha; | |
force.nodes().forEach(function(o, i) { | |
o.y += (foci[o.id].y - o.y) * k; | |
o.x += (foci[o.id].x - o.x) * k; | |
}); | |
vis.selectAll("circle") | |
.attr("cx", function(d) { return d.x; }) | |
.attr("cy", function(d) { return d.y; }); | |
vis.selectAll("text") | |
.attr("x", function(d) { return d.x; }) | |
.attr("y", function(d) { return d.y; }); | |
}); | |
var medals = d3.json("medals.json", function (data) { | |
// prep data | |
for (var i=0; i<data.length; i++) { | |
var d = data[i]; | |
nodes.push({id:0, name:d.Country, type:"g", value:d.Gold}); | |
nodes.push({id:1, name:d.Country, type:"s", value:d.Silver}); | |
nodes.push({id:2, name:d.Country, type:"b", value:d.Bronze}); | |
} | |
force.start(); | |
var node = vis.selectAll("g.node") | |
.data(nodes) | |
.enter().append("g") | |
.attr("class", "node") | |
.attr("cx", function(d) { return d.x; }) | |
.attr("cy", function(d) { return d.y; }) | |
.call(force.drag); | |
node.append("circle") | |
.attr("class", function(d) { | |
return (d.type == "g") ? "gold" : (d.type == "s") ? "silver" : "bronze"; | |
}) | |
.attr("r", function(d) { return scale(d.value); }); | |
node.append("text") | |
.attr("text-anchor", "middle") | |
.attr("dy", ".3em") | |
.text(function(d) { | |
var name = d.name.substring(0, Math.max(+d.value / 2, 2)); | |
return name; | |
}); | |
}); | |
</script> | |
</body> | |
</html> |
[ | |
{ | |
"Rank by Gold": "1", | |
"Country": "United States of America", | |
"Gold": "39", | |
"Silver": "25", | |
"Bronze": "26", | |
"Total": "90" | |
}, | |
{ | |
"Rank by Gold": "2", | |
"Country": "People's Republic of China", | |
"Gold": "37", | |
"Silver": "25", | |
"Bronze": "19", | |
"Total": "81" | |
}, | |
{ | |
"Rank by Gold": "3", | |
"Country": "Great Britain", | |
"Gold": "25", | |
"Silver": "15", | |
"Bronze": "15", | |
"Total": "55" | |
}, | |
{ | |
"Rank by Gold": "4", | |
"Country": "Russian Federation", | |
"Gold": "13", | |
"Silver": "21", | |
"Bronze": "24", | |
"Total": "58" | |
}, | |
{ | |
"Rank by Gold": "5", | |
"Country": "Republic of Korea", | |
"Gold": "12", | |
"Silver": "7", | |
"Bronze": "6", | |
"Total": "25" | |
}, | |
{ | |
"Rank by Gold": "6", | |
"Country": "Germany", | |
"Gold": "10", | |
"Silver": "17", | |
"Bronze": "11", | |
"Total": "38" | |
}, | |
{ | |
"Rank by Gold": "7", | |
"Country": "France", | |
"Gold": "8", | |
"Silver": "9", | |
"Bronze": "12", | |
"Total": "29" | |
}, | |
{ | |
"Rank by Gold": "8", | |
"Country": "Hungary", | |
"Gold": "8", | |
"Silver": "4", | |
"Bronze": "3", | |
"Total": "15" | |
}, | |
{ | |
"Rank by Gold": "9", | |
"Country": "Australia", | |
"Gold": "7", | |
"Silver": "13", | |
"Bronze": "10", | |
"Total": "30" | |
}, | |
{ | |
"Rank by Gold": "10", | |
"Country": "Italy", | |
"Gold": "7", | |
"Silver": "6", | |
"Bronze": "7", | |
"Total": "20" | |
}, | |
{ | |
"Rank by Gold": "11", | |
"Country": "Kazakhstan", | |
"Gold": "6", | |
"Silver": "0", | |
"Bronze": "3", | |
"Total": "9" | |
}, | |
{ | |
"Rank by Gold": "12", | |
"Country": "Japan", | |
"Gold": "5", | |
"Silver": "14", | |
"Bronze": "15", | |
"Total": "34" | |
}, | |
{ | |
"Rank by Gold": "13", | |
"Country": "Netherlands", | |
"Gold": "5", | |
"Silver": "5", | |
"Bronze": "7", | |
"Total": "17" | |
}, | |
{ | |
"Rank by Gold": "14", | |
"Country": "Islamic Republic of Iran", | |
"Gold": "4", | |
"Silver": "4", | |
"Bronze": "1", | |
"Total": "9" | |
}, | |
{ | |
"Rank by Gold": "15", | |
"Country": "New Zealand", | |
"Gold": "4", | |
"Silver": "2", | |
"Bronze": "5", | |
"Total": "11" | |
}, | |
{ | |
"Rank by Gold": "16", | |
"Country": "Democratic People's Republic of Korea", | |
"Gold": "4", | |
"Silver": "0", | |
"Bronze": "1", | |
"Total": "5" | |
}, | |
{ | |
"Rank by Gold": "17", | |
"Country": "Belarus", | |
"Gold": "3", | |
"Silver": "3", | |
"Bronze": "4", | |
"Total": "10" | |
}, | |
{ | |
"Rank by Gold": "18", | |
"Country": "Cuba", | |
"Gold": "3", | |
"Silver": "3", | |
"Bronze": "3", | |
"Total": "9" | |
}, | |
{ | |
"Rank by Gold": "18", | |
"Country": "Jamaica", | |
"Gold": "3", | |
"Silver": "3", | |
"Bronze": "3", | |
"Total": "9" | |
}, | |
{ | |
"Rank by Gold": "20", | |
"Country": "Ukraine", | |
"Gold": "3", | |
"Silver": "1", | |
"Bronze": "6", | |
"Total": "10" | |
}, | |
{ | |
"Rank by Gold": "21", | |
"Country": "South Africa", | |
"Gold": "3", | |
"Silver": "1", | |
"Bronze": "1", | |
"Total": "5" | |
}, | |
{ | |
"Rank by Gold": "22", | |
"Country": "Spain", | |
"Gold": "2", | |
"Silver": "7", | |
"Bronze": "3", | |
"Total": "12" | |
}, | |
{ | |
"Rank by Gold": "23", | |
"Country": "Romania", | |
"Gold": "2", | |
"Silver": "5", | |
"Bronze": "2", | |
"Total": "9" | |
}, | |
{ | |
"Rank by Gold": "24", | |
"Country": "Denmark", | |
"Gold": "2", | |
"Silver": "4", | |
"Bronze": "3", | |
"Total": "9" | |
}, | |
{ | |
"Rank by Gold": "25", | |
"Country": "Czech Republic", | |
"Gold": "2", | |
"Silver": "3", | |
"Bronze": "3", | |
"Total": "8" | |
}, | |
{ | |
"Rank by Gold": "26", | |
"Country": "Brazil", | |
"Gold": "2", | |
"Silver": "2", | |
"Bronze": "7", | |
"Total": "11" | |
}, | |
{ | |
"Rank by Gold": "27", | |
"Country": "Kenya", | |
"Gold": "2", | |
"Silver": "2", | |
"Bronze": "3", | |
"Total": "7" | |
}, | |
{ | |
"Rank by Gold": "28", | |
"Country": "Poland", | |
"Gold": "2", | |
"Silver": "1", | |
"Bronze": "6", | |
"Total": "9" | |
}, | |
{ | |
"Rank by Gold": "29", | |
"Country": "Croatia", | |
"Gold": "2", | |
"Silver": "1", | |
"Bronze": "1", | |
"Total": "4" | |
}, | |
{ | |
"Rank by Gold": "30", | |
"Country": "Switzerland", | |
"Gold": "2", | |
"Silver": "1", | |
"Bronze": "0", | |
"Total": "3" | |
}, | |
{ | |
"Rank by Gold": "31", | |
"Country": "Ethiopia", | |
"Gold": "2", | |
"Silver": "0", | |
"Bronze": "2", | |
"Total": "4" | |
}, | |
{ | |
"Rank by Gold": "32", | |
"Country": "Canada", | |
"Gold": "1", | |
"Silver": "5", | |
"Bronze": "11", | |
"Total": "17" | |
}, | |
{ | |
"Rank by Gold": "33", | |
"Country": "Sweden", | |
"Gold": "1", | |
"Silver": "3", | |
"Bronze": "3", | |
"Total": "7" | |
}, | |
{ | |
"Rank by Gold": "34", | |
"Country": "Slovenia", | |
"Gold": "1", | |
"Silver": "1", | |
"Bronze": "2", | |
"Total": "4" | |
}, | |
{ | |
"Rank by Gold": "35", | |
"Country": "Georgia", | |
"Gold": "1", | |
"Silver": "1", | |
"Bronze": "1", | |
"Total": "3" | |
}, | |
{ | |
"Rank by Gold": "35", | |
"Country": "Norway", | |
"Gold": "1", | |
"Silver": "1", | |
"Bronze": "1", | |
"Total": "3" | |
}, | |
{ | |
"Rank by Gold": "35", | |
"Country": "Tunisia", | |
"Gold": "1", | |
"Silver": "1", | |
"Bronze": "1", | |
"Total": "3" | |
}, | |
{ | |
"Rank by Gold": "38", | |
"Country": "Dominican Republic", | |
"Gold": "1", | |
"Silver": "1", | |
"Bronze": "0", | |
"Total": "2" | |
}, | |
{ | |
"Rank by Gold": "39", | |
"Country": "Ireland", | |
"Gold": "1", | |
"Silver": "0", | |
"Bronze": "2", | |
"Total": "3" | |
}, | |
{ | |
"Rank by Gold": "40", | |
"Country": "Lithuania", | |
"Gold": "1", | |
"Silver": "0", | |
"Bronze": "1", | |
"Total": "2" | |
}, | |
{ | |
"Rank by Gold": "40", | |
"Country": "Turkey", | |
"Gold": "1", | |
"Silver": "0", | |
"Bronze": "1", | |
"Total": "2" | |
}, | |
{ | |
"Rank by Gold": "42", | |
"Country": "Algeria", | |
"Gold": "1", | |
"Silver": "0", | |
"Bronze": "0", | |
"Total": "1" | |
}, | |
{ | |
"Rank by Gold": "42", | |
"Country": "Grenada", | |
"Gold": "1", | |
"Silver": "0", | |
"Bronze": "0", | |
"Total": "1" | |
}, | |
{ | |
"Rank by Gold": "42", | |
"Country": "Venezuela", | |
"Gold": "1", | |
"Silver": "0", | |
"Bronze": "0", | |
"Total": "1" | |
}, | |
{ | |
"Rank by Gold": "45", | |
"Country": "Colombia", | |
"Gold": "0", | |
"Silver": "3", | |
"Bronze": "3", | |
"Total": "6" | |
}, | |
{ | |
"Rank by Gold": "46", | |
"Country": "Mexico", | |
"Gold": "0", | |
"Silver": "3", | |
"Bronze": "2", | |
"Total": "5" | |
}, | |
{ | |
"Rank by Gold": "47", | |
"Country": "Azerbaijan", | |
"Gold": "0", | |
"Silver": "2", | |
"Bronze": "4", | |
"Total": "6" | |
}, | |
{ | |
"Rank by Gold": "48", | |
"Country": "Egypt", | |
"Gold": "0", | |
"Silver": "2", | |
"Bronze": "0", | |
"Total": "2" | |
}, | |
{ | |
"Rank by Gold": "49", | |
"Country": "India", | |
"Gold": "0", | |
"Silver": "1", | |
"Bronze": "3", | |
"Total": "4" | |
}, | |
{ | |
"Rank by Gold": "49", | |
"Country": "Mongolia", | |
"Gold": "0", | |
"Silver": "1", | |
"Bronze": "3", | |
"Total": "4" | |
}, | |
{ | |
"Rank by Gold": "49", | |
"Country": "Slovakia", | |
"Gold": "0", | |
"Silver": "1", | |
"Bronze": "3", | |
"Total": "4" | |
}, | |
{ | |
"Rank by Gold": "52", | |
"Country": "Armenia", | |
"Gold": "0", | |
"Silver": "1", | |
"Bronze": "2", | |
"Total": "3" | |
}, | |
{ | |
"Rank by Gold": "52", | |
"Country": "Belgium", | |
"Gold": "0", | |
"Silver": "1", | |
"Bronze": "2", | |
"Total": "3" | |
}, | |
{ | |
"Rank by Gold": "54", | |
"Country": "Bulgaria", | |
"Gold": "0", | |
"Silver": "1", | |
"Bronze": "1", | |
"Total": "2" | |
}, | |
{ | |
"Rank by Gold": "54", | |
"Country": "Estonia", | |
"Gold": "0", | |
"Silver": "1", | |
"Bronze": "1", | |
"Total": "2" | |
}, | |
{ | |
"Rank by Gold": "54", | |
"Country": "Indonesia", | |
"Gold": "0", | |
"Silver": "1", | |
"Bronze": "1", | |
"Total": "2" | |
}, | |
{ | |
"Rank by Gold": "54", | |
"Country": "Malaysia", | |
"Gold": "0", | |
"Silver": "1", | |
"Bronze": "1", | |
"Total": "2" | |
}, | |
{ | |
"Rank by Gold": "54", | |
"Country": "Serbia", | |
"Gold": "0", | |
"Silver": "1", | |
"Bronze": "1", | |
"Total": "2" | |
}, | |
{ | |
"Rank by Gold": "54", | |
"Country": "Thailand", | |
"Gold": "0", | |
"Silver": "1", | |
"Bronze": "1", | |
"Total": "2" | |
}, | |
{ | |
"Rank by Gold": "54", | |
"Country": "Taipei (Chinese Taipei)", | |
"Gold": "0", | |
"Silver": "1", | |
"Bronze": "1", | |
"Total": "2" | |
}, | |
{ | |
"Rank by Gold": "61", | |
"Country": "Botswana", | |
"Gold": "0", | |
"Silver": "1", | |
"Bronze": "0", | |
"Total": "1" | |
}, | |
{ | |
"Rank by Gold": "61", | |
"Country": "Cyprus", | |
"Gold": "0", | |
"Silver": "1", | |
"Bronze": "0", | |
"Total": "1" | |
}, | |
{ | |
"Rank by Gold": "61", | |
"Country": "Finland", | |
"Gold": "0", | |
"Silver": "1", | |
"Bronze": "0", | |
"Total": "1" | |
}, | |
{ | |
"Rank by Gold": "61", | |
"Country": "Guatemala", | |
"Gold": "0", | |
"Silver": "1", | |
"Bronze": "0", | |
"Total": "1" | |
}, | |
{ | |
"Rank by Gold": "61", | |
"Country": "Portugal", | |
"Gold": "0", | |
"Silver": "1", | |
"Bronze": "0", | |
"Total": "1" | |
}, | |
{ | |
"Rank by Gold": "66", | |
"Country": "Argentina", | |
"Gold": "0", | |
"Silver": "0", | |
"Bronze": "2", | |
"Total": "2" | |
}, | |
{ | |
"Rank by Gold": "66", | |
"Country": "Greece", | |
"Gold": "0", | |
"Silver": "0", | |
"Bronze": "2", | |
"Total": "2" | |
}, | |
{ | |
"Rank by Gold": "66", | |
"Country": "Republic of Moldova", | |
"Gold": "0", | |
"Silver": "0", | |
"Bronze": "2", | |
"Total": "2" | |
}, | |
{ | |
"Rank by Gold": "66", | |
"Country": "Qatar", | |
"Gold": "0", | |
"Silver": "0", | |
"Bronze": "2", | |
"Total": "2" | |
}, | |
{ | |
"Rank by Gold": "66", | |
"Country": "Singapore", | |
"Gold": "0", | |
"Silver": "0", | |
"Bronze": "2", | |
"Total": "2" | |
}, | |
{ | |
"Rank by Gold": "66", | |
"Country": "Uzbekistan", | |
"Gold": "0", | |
"Silver": "0", | |
"Bronze": "2", | |
"Total": "2" | |
}, | |
{ | |
"Rank by Gold": "72", | |
"Country": "Afghanistan", | |
"Gold": "0", | |
"Silver": "0", | |
"Bronze": "1", | |
"Total": "1" | |
}, | |
{ | |
"Rank by Gold": "72", | |
"Country": "Hong Kong, China", | |
"Gold": "0", | |
"Silver": "0", | |
"Bronze": "1", | |
"Total": "1" | |
}, | |
{ | |
"Rank by Gold": "72", | |
"Country": "Saudi Arabia", | |
"Gold": "0", | |
"Silver": "0", | |
"Bronze": "1", | |
"Total": "1" | |
}, | |
{ | |
"Rank by Gold": "72", | |
"Country": "Kuwait", | |
"Gold": "0", | |
"Silver": "0", | |
"Bronze": "1", | |
"Total": "1" | |
}, | |
{ | |
"Rank by Gold": "72", | |
"Country": "Latvia", | |
"Gold": "0", | |
"Silver": "0", | |
"Bronze": "1", | |
"Total": "1" | |
}, | |
{ | |
"Rank by Gold": "72", | |
"Country": "Morocco", | |
"Gold": "0", | |
"Silver": "0", | |
"Bronze": "1", | |
"Total": "1" | |
}, | |
{ | |
"Rank by Gold": "72", | |
"Country": "Puerto Rico", | |
"Gold": "0", | |
"Silver": "0", | |
"Bronze": "1", | |
"Total": "1" | |
}, | |
{ | |
"Rank by Gold": "72", | |
"Country": "Tajikistan", | |
"Gold": "0", | |
"Silver": "0", | |
"Bronze": "1", | |
"Total": "1" | |
}, | |
{ | |
"Rank by Gold": "72", | |
"Country": "Trinidad and Tobago", | |
"Gold": "0", | |
"Silver": "0", | |
"Bronze": "1", | |
"Total": "1" | |
} | |
] |