Skip to content

Instantly share code, notes, and snippets.

@mtaptich
Last active December 11, 2015 00:14
Show Gist options
  • Select an option

  • Save mtaptich/238244c5ffa5337cf101 to your computer and use it in GitHub Desktop.

Select an option

Save mtaptich/238244c5ffa5337cf101 to your computer and use it in GitHub Desktop.
Dictionaries

The seventh of a series of data visualizations on basic coding concepts. Dictionaries are a very helpful data structure for storing hierarchical relationships. Get data from the team that is two layers into the dictionary called NCAA!

<!DOCTYPE html>
<meta charset="utf-8">
<style>
body {
width: 1024px;
margin-top: 0;
margin: auto;
font-family: "Lato", "PT Serif", serif;
color: #222222;
padding: 0;
font-weight: 300;
line-height: 33px;
-webkit-font-smoothing: antialiased;
}
.node circle {
fill: #ecf0f1;
stroke: #16a085;
stroke-width: 1.5px;
}
.node {
font: 10px serif;
}
.link {
fill: none;
stroke: #ddd;
stroke-width: 1.5px;
-webkit-font-smoothing: antialiased;
}
</style>
<body>
<script src="//d3js.org/d3.v3.min.js"></script>
<script>
var width = 900,
height =700,
translate_speed = 1000;
var json = {'name': 'NCAA', 'children': [{'name': 'ACC', 'children': [{'name': 'Boston College', 'size': '1893'}, {'name': 'Clemson', 'size': '1896'}, {'name': 'Duke', 'size': '1888'}, {'name': 'Florida State', 'size': '1947'}, {'name': 'Georgia Tech', 'size': '1892'}, {'name': 'Louisville', 'size': '1910'}, {'name': 'Miami (FL)', 'size': '1926'}, {'name': 'North Carolina', 'size': '1888'}, {'name': 'NC State', 'size': '1892'}, {'name': 'Notre Dame', 'size': '1887'}, {'name': 'Pittsburgh', 'size': '1890'}, {'name': 'Syracuse', 'size': '1889'}, {'name': 'Virginia', 'size': '1888'}, {'name': 'Virginia Tech', 'size': '1892'}, {'name': 'Wake Forest', 'size': '1888'}]}, {'name': 'Big Ten', 'children': [{'name': 'Illinois', 'size': '1890'}, {'name': 'Indiana', 'size': '1887'}, {'name': 'Iowa', 'size': '1889'}, {'name': 'Maryland', 'size': '1888'}, {'name': 'Michigan', 'size': '1878'}, {'name': 'Michigan State', 'size': '1885'}, {'name': 'Minnesota', 'size': '1882'}, {'name': 'Nebraska', 'size': '1890'}, {'name': 'Northwestern', 'size': '1875'}, {'name': 'Ohio State', 'size': '1889'}, {'name': 'Penn State', 'size': '1881'}, {'name': 'Purdue', 'size': '1887'}, {'name': 'Rutgers', 'size': '1869'}, {'name': 'Wisconsin', 'size': '1889'}]}, {'name': 'Big 12', 'children': [{'name': 'Baylor', 'size': '1899'}, {'name': 'Iowa State', 'size': '1892'}, {'name': 'Kansas', 'size': '1890'}, {'name': 'Kansas State', 'size': '1896'}, {'name': 'Oklahoma', 'size': '1895'}, {'name': 'Oklahoma State', 'size': '1901'}, {'name': 'Texas', 'size': '1893'}, {'name': 'TCU', 'size': '1896'}, {'name': 'Texas Tech', 'size': '1925'}, {'name': 'West Virginia', 'size': '1891'}]}, {'name': 'Pac-12', 'children': [{'name': 'Arizona', 'size': '1899'}, {'name': 'Arizona State', 'size': '1896'}, {'name': 'California', 'size': '1882'}, {'name': 'UCLA', 'size': '1919'}, {'name': 'Colorado', 'size': '1890'}, {'name': 'Oregon', 'size': '1894'}, {'name': 'Oregon State', 'size': '1893'}, {'name': 'USC', 'size': '1888'}, {'name': 'Stanford', 'size': '1891'}, {'name': 'Utah', 'size': '1892'}, {'name': 'Washington', 'size': '1889'}, {'name': 'Washington State', 'size': '1893'}]}, {'name': 'SEC', 'children': [{'name': 'Alabama', 'size': '1892'}, {'name': 'Arkansas', 'size': '1894'}, {'name': 'Auburn', 'size': '1892'}, {'name': 'Florida', 'size': '1906'}, {'name': 'Georgia', 'size': '1892'}, {'name': 'Kentucky', 'size': '1881'}, {'name': 'LSU', 'size': '1893'}, {'name': 'Ole Miss', 'size': '1890'}, {'name': 'Mississippi State', 'size': '1895'}, {'name': 'Missouri', 'size': '1890'}, {'name': 'South Carolina', 'size': '1892'}, {'name': 'Tennessee', 'size': '1891'}, {'name': 'Texas A&M', 'size': '1894'}, {'name': 'Vanderbilt', 'size': '1890'}]}]}
var conferences = ['ACC', 'Big Ten', 'Big 12', 'Pac-12', 'SEC'];
var NCAA = {'ACC': ['Boston College', 'Clemson', 'Duke', 'Florida State', 'Georgia Tech', 'Louisville', 'Miami (FL)', 'North Carolina', 'NC State', 'Notre Dame', 'Pittsburgh', 'Syracuse', 'Virginia', 'Virginia Tech', 'Wake Forest'], 'Big Ten': ['Illinois', 'Indiana', 'Iowa', 'Maryland', 'Michigan', 'Michigan State', 'Minnesota', 'Nebraska', 'Northwestern', 'Ohio State', 'Penn State', 'Purdue', 'Rutgers', 'Wisconsin'], 'SEC': ['Alabama', 'Arkansas', 'Auburn', 'Florida', 'Georgia', 'Kentucky', 'LSU', 'Ole Miss', 'Mississippi State', 'Missouri', 'South Carolina', 'Tennessee', 'Texas A&M', 'Vanderbilt'], 'Big 12': ['Baylor', 'Iowa State', 'Kansas', 'Kansas State', 'Oklahoma', 'Oklahoma State', 'Texas', 'TCU', 'Texas Tech', 'West Virginia'], 'Pac-12': ['Arizona', 'Arizona State', 'California', 'UCLA', 'Colorado', 'Oregon', 'Oregon State', 'USC', 'Stanford', 'Utah', 'Washington', 'Washington State']};
var tree = d3.layout.tree()
.size([ width - 200, height-400]);
var diagonal = d3.svg.diagonal()
.projection(function(d) { return [d.x, d.y]; });
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.attr("transform", "translate(100,200)");
var nodes = tree.nodes(json),
links = tree.links(nodes);
var link = svg.selectAll("path.link")
.data(links)
.enter().append("path")
.attr("class", "link")
.attr("d", diagonal);
var node = svg.selectAll("g.node")
.data(nodes)
.enter().append("g")
.attr("class", 'node')
.attr('class', function(d){ return 'node '+d.name.replace(' ', '').replace('&', '').replace('(', '').replace(')', '')})
.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; })
node.append("circle")
.attr("r", function(d) { return d.children ? 10: "4"; });
node.append("text")
.attr("dx", function(d) { return d.children ? 18 : -8; })
.attr("dy", 3)
.attr("transform", function(d) { return d.children ? "rotate(0)": "rotate(-90)"; })
.attr("text-anchor", function(d) { return d.children ? "start" : "end"; })
.style("font-size", function(d) { return d.children ? 18 : 10; })
.text(function(d) { return d.name; });
svg.append('text')
.attr('x', width/2 - 100)
.attr('y', -125)
.attr('class', 'status')
.text('NCAA is a Dictionary.')
.style('text-anchor', 'middle')
.style('font-size', '40')
function bring_to_top(conference, team){
d3.select('.status')
.transition().duration(translate_speed/2)
.ease('cubic').style('fill', '#e74c3c')
.style('font-size', '50')
.text('NCAA[ "'+conference+'" ][ "'+team+'" ]')
.transition().duration(translate_speed*0.5)
.transition().duration(500)
.style('fill', '#000').style('font-size', '40');
d3.select('.'+team.replace(' ','').replace('&', '').replace('(', '').replace(')', ''))
.transition().duration(translate_speed*1.5)
.transition().duration(translate_speed)
.attr('transform', function(){
var t = d3.select(this).attr('transform').split(',');
return t[0]+',400)';
})
.transition().duration(translate_speed)
.attr('transform', 'translate(-50,400)')
.transition().duration(translate_speed/3)
.attr('transform', 'translate(50,-50)rotate(90)scale(2)')
.transition().duration(translate_speed)
.attr('transform', 'translate(380,-50)rotate(90)scale(2)')
.transition().duration(translate_speed)
.attr('transform', 'translate(360,-55)scale(2.5)rotate(90)')
.transition().duration(500)
.attr('transform', 'translate(380,-50)scale(2)rotate(90)')
.transition().duration(translate_speed)
.attr('transform', 'translate(750,-50)scale(2)rotate(90)')
.transition().duration(translate_speed/3)
.attr("transform", function(d) { return "translate(" + 750 + "," + 400 + ")"; })
.transition().duration(translate_speed)
.attr("transform", function(d) { return "translate(" + d.x + "," + 400 + ")"; })
.transition().duration(translate_speed)
.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; })
}
function run(){
var conference_index = Math.floor(Math.random()*5)
var conference = conferences[conference_index];
var team_index = Math.floor(Math.random()*NCAA[conference].length)
bring_to_top(conference, NCAA[conference][team_index])
}
run()
setInterval(run, 10100)
d3.select(self.frameElement).style("height", height + "px");
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment