Advertisement
Guest User

Untitled

a guest
Apr 15th, 2014
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.71 KB | None | 0 0
  1. type count
  2. level1/level2/level3/Foo 24
  3. level1/level2/level3/Bar 2
  4. level1/level2/Baz 28
  5. level1/level2/Quz 3
  6. ...
  7.  
  8. d3.tsv("data.tsv", function(error, data) {
  9. data.forEach(function(d) {
  10. d.count = +d.count;
  11. });
  12.  
  13. // define key functions for a depth up to 4
  14. var nestedData = d3.nest()
  15. .key(function(d) { return level(d.type, 2); })
  16. .key(function(d) { return level(d.type, 3); })
  17. .key(function(d) { return level(d.type, 4); })
  18. .entries(data);
  19.  
  20. // create the key for a specified level
  21. function level(type, l) {
  22. var parts = type.split("/");
  23. var result = "";
  24. for (i = 0; i < l && i < parts.length; i++) {
  25. result += parts[i];
  26. if (i < l-1 && i < parts.length-1) {
  27. result += "/";
  28. }
  29. }
  30. return result;
  31. }
  32. ...
  33.  
  34. function rollupFn(group) {
  35. var leaves = [],
  36. groups = [];
  37.  
  38. // Split the items into leaves and groups
  39. group.forEach(function(item) {
  40. // First eliminate level already accounted for by d3.nest key
  41. item.type = item.type.substr(item.type.indexOf('/')+1);
  42.  
  43. if (item.type.indexOf('/') > -1) {
  44. groups.push(item);
  45. } else {
  46. leaves.push(item);
  47. }
  48. });
  49.  
  50. // Convert the "group" items into a d3.nest object
  51. groups = d3.nest().key(function(d) {
  52. return d.type.split('/')[0];
  53. })
  54. .rollup(rollupFn)
  55. .entries(groups);
  56.  
  57. var results = [];
  58. if (groups.length > 0) { results.push(groups); }
  59. if (leaves.length > 0) { results.push(leaves); }
  60. return results;
  61. };
  62.  
  63. var nestedData = d3.nest()
  64. .key(function(d) { return "level1" }) // optional: first group contains everything
  65. .rollup(rollupFn)
  66. .entries(data);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement