Skip to content

Instantly share code, notes, and snippets.

@fotock
Last active August 29, 2015 14:17
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 fotock/dfa41c46d778ed611f64 to your computer and use it in GitHub Desktop.
Save fotock/dfa41c46d778ed611f64 to your computer and use it in GitHub Desktop.
Swift Bubbles in D3.js
<!DOCTYPE html>
<meta charset="utf-8">
<style>
text {font-size: 13px;font-family: Helvetica,Arial,sans-serif; font-weight:100; fill: rgba(255,255,255, .6); transition: .2s; cursor: pointer;}
g:hover text {font-size: 18px; fill: rgba(255,255,255,1)}
</style>
<body>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script>
var diameter = 960, format = d3.format(",d"), color = d3.scale.category10();
var bubble = d3.layout.pack().sort(null).size([diameter, diameter]).padding(1.5);
var svg = d3.select("body").append("svg")
.attr("width", diameter)
.attr("height", diameter)
.attr("class", "bubble");
d3.json("swift.json", function(error, root) {
var node = svg.selectAll(".node")
.data(bubble.nodes(classes(root))
.filter(function(d) { return !d.children; }))
.enter().append("g")
.attr("class", "node")
.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
node.append("circle")
.attr("r", function(d) { return d.r; })
.style("fill", function(d) { return color(d.packageName); });
node.append("text")
.attr("dy", ".3em")
.style("text-anchor", "middle")
.text(function(d) { return d.className.substring(0, d.r / 3); });
});
// Returns a flattened hierarchy containing all leaf nodes under the root.
function classes(root) {
var classes = [];
function recurse(name, node) {
if (node.children) node.children.forEach(function(child) { recurse(node.name, child); });
else classes.push({packageName: name, className: node.name, value: node.size});
}
recurse(null, root);
return {children: classes};
}
d3.select(self.frameElement).style("height", diameter + "px");
</script>
</body>
{"name":"swift","children":[{"name":"statement","children":[{"name":"if","size":300},{"name":"else","size":921},{"name":"do","size":400},{"name":"for","size":500},{"name":"switch","size":960},{"name":"case","size":800},{"name":"while","size":990},{"name":"break","size":1400},{"name":"continue","size":1900},{"name":"default","size":1600},{"name":"fallthrough","size":3121},{"name":"in","size":300},{"name":"return","size":1300},{"name":"where","size":2021}]},{"name":"declarations","children":[{"name":"class","size":1121},{"name":"extenstion","size":2321},{"name":"func","size":1401},{"name":"public","size":1421},{"name":"private","size":1491},{"name":"operator","size":1921},{"name":"protocol","size":1821},{"name":"struct","size":1421},{"name":"enum","size":1201},{"name":"init","size":1801},{"name":"deinit","size":2821},{"name":"import","size":1821},{"name":"internal","size":2321},{"name":"let","size":1421},{"name":"var","size":1421},{"name":"static","size":1101},{"name":"subscript","size":2021},{"name":"typealias","size":2821}]},{"name":"expression","children":[{"name":"as","size":1621},{"name":"dynamicType","size":4321},{"name":"false","size":801},{"name":"is","size":1620},{"name":"nil","size":1300},{"name":"self","size":1600},{"name":"Self","size":1920},{"name":"super","size":1800},{"name":"true","size":840},{"name":"COLUMN","size":2320},{"name":"FILE","size":1800},{"name":"FUNCTION","size":2720},{"name":"LINE","size":1340}]},{"name":"special","children":[{"name":"associativity","size":2400},{"name":"convenience","size":2900},{"name":"dynamic","size":1400},{"name":"didSet","size":2800},{"name":"final","size":700},{"name":"get","size":900},{"name":"infix","size":1280},{"name":"inout","size":600},{"name":"lazy","size":1480},{"name":"left","size":900},{"name":"mutating","size":1900},{"name":"none","size":800},{"name":"nonmutating","size":3300},{"name":"optional","size":1400},{"name":"override","size":1390},{"name":"postfix","size":980},{"name":"precedence","size":2700},{"name":"prefix","size":900},{"name":"required","size":1800},{"name":"right","size":800},{"name":"set","size":600},{"name":"Type","size":890},{"name":"unowned","size":1690},{"name":"weak","size":800},{"name":"willSet","size":2200}]},{"name":"foundation","children":[{"name":"String","size":1421},{"name":"NSString","size":1421},{"name":"Int","size":721},{"name":"UInt","size":721},{"name":"Double","size":1021},{"name":"CGFloat","size":2721},{"name":"NSNumber","size":2420},{"name":"Bool","size":720},{"name":"Float","size":720},{"name":"Array","size":2020},{"name":"NSArray","size":2020},{"name":"Date","size":1420},{"name":"NSDate","size":2120},{"name":"NSData","size":2000},{"name":"Dictionary","size":2620},{"name":"NSDictionary","size":2920},{"name":"NSObject","size":1820},{"name":"AnyObject","size":3820}]},{"name":"uikit","children":[{"name":"UIApplication","size":3400},{"name":"UIView","size":1200},{"name":"UIViewController","size":6900},{"name":"UILabel","size":2500},{"name":"UIWindow","size":3000},{"name":"UIScrollView","size":3300},{"name":"UIAlertController","size":4600},{"name":"UIActivityIndicatorView","size":8000},{"name":"UIButton","size":2200},{"name":"UIDatePicker","size":3600},{"name":"UIImageView","size":3900},{"name":"UIPageControl","size":3700},{"name":"UISegmentedControl","size":7200},{"name":"UIPickerView","size":2900},{"name":"UIProgressView","size":4200},{"name":"UISlider","size":2200},{"name":"UIStepper","size":2600},{"name":"UISwitch","size":2500},{"name":"UITextField","size":2600},{"name":"UITextView","size":2600},{"name":"UISearchBar","size":2900},{"name":"UISearchController","size":6200},{"name":"UIToolbar","size":2600},{"name":"UIColor","size":2200},{"name":"UIWebView","size":2600}]}]}
@fotock
Copy link
Author

fotock commented Mar 26, 2015

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment