So I'm looking to sort the edges on my Sankey based on their thickness (the thickest edges on the top, the thinnest on the bottom).

I understand that the hierarchical layout algorithm sorts and orders the edges optimally so that the edges cross a minimal number of times in the chart (and make it look clearer). However, our feature requirement is to place the thickest/heaviest edges on the top.

I'm using part of the layout code from the Sankey demo and I have this part of the code that I think I can use to sort the edges:

adjustNodeSize(node: YNode, graph: LayoutGraph): void {

let width = 60;

let height = 40;

const leftEdgeSpace = this.calcRequiredSpace(node.inEdges, graph);

const rightEdgeSpace = this.calcRequiredSpace(node.outEdges, graph);

if (

this.layoutOrientation === LayoutOrientation.TOP_TO_BOTTOM ||

this.layoutOrientation === LayoutOrientation.BOTTOM_TO_TOP

) {

// we have to enlarge the width such that the in-/out-edges can be placed side by side without overlaps

width = Math.max(width, leftEdgeSpace);

width = Math.max(width, rightEdgeSpace);

} else {

// we have to enlarge the height such that the in-/out-edges can be placed side by side without overlaps

height = Math.max(height, leftEdgeSpace);

height = Math.max(height, rightEdgeSpace);

}

// adjust size for edges with strong port constraints

const edgeThicknessDP = graph.getDataProvider(

HierarchicLayout.EDGE_THICKNESS_DP_KEY

);

if (edgeThicknessDP !== null) {

if (node.edges) {

node.edges.forEach((edge: Edge): void => {

const thickness = edgeThicknessDP.getNumber(edge);

const spc = PortConstraint.getSPC(graph, edge);

if (edge.source === node && spc !== null && spc.strong) {

const sourcePoint = graph.getSourcePointRel(edge);

width = Math.max(width, Math.abs(sourcePoint.x) * 2 + thickness);

height = Math.max(height, Math.abs(sourcePoint.y) * 2 + thickness);

}

const tpc = PortConstraint.getTPC(graph, edge);

if (edge.target === node && tpc !== null && tpc.strong) {

const targetPoint = graph.getTargetPointRel(edge);

width = Math.max(width, Math.abs(targetPoint.x) * 2 + thickness);

height = Math.max(height, Math.abs(targetPoint.y) * 2 + thickness);

}

});

}

}

graph.setSize(node, width, height);

}

Also in the docs, I found a sortEdges() method and I think maybe this is something I can use to sort the edges. Am I on the right track here? Or does anyone have any code samples that uses these methods (like sortEdges) or a code sample that actually sorts the edges based on their thickness?