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;
},`