pack.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import { assign, isArray } from '@antv/util';
  2. import * as d3Hierarchy from 'd3-hierarchy';
  3. import { getAllNodes, getField } from './util';
  4. var DEFAULT_OPTIONS = {
  5. field: 'value',
  6. as: ['x', 'y', 'r'],
  7. // 默认降序
  8. sort: function (a, b) { return b.value - a.value; },
  9. };
  10. export function pack(data, options) {
  11. options = assign({}, DEFAULT_OPTIONS, options);
  12. var as = options.as;
  13. if (!isArray(as) || as.length !== 3) {
  14. throw new TypeError('Invalid as: it must be an array with 3 strings (e.g. [ "x", "y", "r" ])!');
  15. }
  16. var field;
  17. try {
  18. field = getField(options);
  19. }
  20. catch (e) {
  21. console.warn(e);
  22. }
  23. var packLayout = function (data) {
  24. return d3Hierarchy.pack().size(options.size).padding(options.padding)(d3Hierarchy
  25. .hierarchy(data)
  26. .sum(function (d) { return d[field]; })
  27. .sort(options.sort));
  28. };
  29. var root = packLayout(data);
  30. var x = as[0];
  31. var y = as[1];
  32. var r = as[2];
  33. root.each(function (node) {
  34. node[x] = node.x;
  35. node[y] = node.y;
  36. node[r] = node.r;
  37. });
  38. return getAllNodes(root);
  39. }
  40. //# sourceMappingURL=pack.js.map