echarts桑基图计算总层级的方法

316 阅读1分钟

ECharts中的桑基图(Sankey Diagram)是一种用于展示流程、能量、材料等关系的图表类型。桑基图通常由节点(node)和流(link)组成,节点代表数据的来源和目标,流代表数据的流动路径。以下方法是获取桑基图总层级的方法。

    //links参数为series.links
    getChartLevelCount(links) {
    var nodes = {};
    // 统计每个节点的父节点和子节点数量
    links.forEach(function (link) {
      if (!nodes[link.source]) {
        nodes[link.source] = { children: 0 };
      }
      if (!nodes[link.target]) {
        nodes[link.target] = { parents: 0 };
      }
      nodes[link.source].children++;
      nodes[link.target].parents++;
    });

    // 获取根节点
    var rootNodes = [];
    for (var key in nodes) {
      if (!nodes[key].parents) {
        rootNodes.push(key);
      }
    }

    // 递归统计层级个数
    function countLevels(node, level) {
      if (!node || !nodes[node] || nodes[node].children === 0) {
        return level;
      }
      var maxLevel = level;
      links.forEach(function (link) {
        if (link.source === node) {
          var childLevel = countLevels(link.target, level + 1);
          if (childLevel > maxLevel) {
            maxLevel = childLevel;
          }
        }
      });
      return maxLevel;
    }

    // 统计层级个数
    var maxLevel = 0;
    rootNodes.forEach(function (rootNode) {
      var level = countLevels(rootNode, 1);
      if (level > maxLevel) {
        maxLevel = level;
      }
    });

    return maxLevel;
  },`