in src/sankeyDiagram.ts [1331:1377]
private static scalePositionsByAxes(
sort: string,
nodes: SankeyDiagramNode[],
columns: SankeyDiagramColumn[],
scale: SankeyDiagramScaleSettings,
viewportHeight: number, ignoreSelfLinkWeight: boolean): void {
let shiftByAxisY: number = SankeyDiagram.DefaultOffset,
currentX: number = SankeyDiagram.DefaultPosition,
index: number = SankeyDiagram.DefaultIndex;
nodes.forEach((node: SankeyDiagramNode) => {
let offsetByY: number = SankeyDiagram.DefaultOffset,
availableHeight: number = SankeyDiagram.MinSize;
if (currentX !== node.x) {
currentX = node.x;
shiftByAxisY = SankeyDiagram.DefaultOffset;
index = SankeyDiagram.DefaultIndex;
}
if (columns[currentX]) {
availableHeight = viewportHeight - columns[currentX].sumValueOfNodes * scale.y;
offsetByY = availableHeight / columns[currentX].countOfNodes;
}
node.x *= scale.x;
let selfLinkHeight: number = d3.max(node.links.filter(l => l.direction === SankeyLinkDirrections.SelfLink).map(l => l.weigth));
if (!selfLinkHeight) {
selfLinkHeight = 0;
}
if (ignoreSelfLinkWeight && selfLinkHeight > 0) {
selfLinkHeight = node.width;
}
node.height = (Math.max(node.inputWeight, node.outputWeight, node.inputWeight + selfLinkHeight, node.outputWeight + selfLinkHeight)
) * scale.y;
let backwardPsudoNodeSpace = SankeyDiagram.BackwardPsudoNodeMargin + d3.max([node.backwardWeight, node.selftLinkWeight / 2]) * scale.y;
node.y = shiftByAxisY + offsetByY * index + backwardPsudoNodeSpace;
shiftByAxisY += node.height;
index++;
});
}