Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- type count
- level1/level2/level3/Foo 24
- level1/level2/level3/Bar 2
- level1/level2/Baz 28
- level1/level2/Quz 3
- ...
- d3.tsv("data.tsv", function(error, data) {
- data.forEach(function(d) {
- d.count = +d.count;
- });
- // define key functions for a depth up to 4
- var nestedData = d3.nest()
- .key(function(d) { return level(d.type, 2); })
- .key(function(d) { return level(d.type, 3); })
- .key(function(d) { return level(d.type, 4); })
- .entries(data);
- // create the key for a specified level
- function level(type, l) {
- var parts = type.split("/");
- var result = "";
- for (i = 0; i < l && i < parts.length; i++) {
- result += parts[i];
- if (i < l-1 && i < parts.length-1) {
- result += "/";
- }
- }
- return result;
- }
- ...
- function rollupFn(group) {
- var leaves = [],
- groups = [];
- // Split the items into leaves and groups
- group.forEach(function(item) {
- // First eliminate level already accounted for by d3.nest key
- item.type = item.type.substr(item.type.indexOf('/')+1);
- if (item.type.indexOf('/') > -1) {
- groups.push(item);
- } else {
- leaves.push(item);
- }
- });
- // Convert the "group" items into a d3.nest object
- groups = d3.nest().key(function(d) {
- return d.type.split('/')[0];
- })
- .rollup(rollupFn)
- .entries(groups);
- var results = [];
- if (groups.length > 0) { results.push(groups); }
- if (leaves.length > 0) { results.push(leaves); }
- return results;
- };
- var nestedData = d3.nest()
- .key(function(d) { return "level1" }) // optional: first group contains everything
- .rollup(rollupFn)
- .entries(data);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement