From 82af33e80ed08dd5d88dec4a41978865f50eac94 Mon Sep 17 00:00:00 2001 From: water <672684719@qq.com> Date: Wed, 12 Aug 2026 02:07:54 +0800 Subject: [PATCH] fix(sankey): transpose node.x/node.y scaling for vertical orientation (Fixes #7947) --- src/traces/sankey/render.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/traces/sankey/render.js b/src/traces/sankey/render.js index a07d18a9c9e..42af645fd1d 100644 --- a/src/traces/sankey/render.js +++ b/src/traces/sankey/render.js @@ -246,7 +246,9 @@ function sankeyModel(layout, d, traceIndex) { if(trace.node.x.length && trace.node.y.length) { for(i = 0; i < Math.min(trace.node.x.length, trace.node.y.length, graph.nodes.length); i++) { if(trace.node.x[i] && trace.node.y[i]) { - var pos = [trace.node.x[i] * width, trace.node.y[i] * height]; + var pos = horizontal + ? [trace.node.x[i] * width, trace.node.y[i] * height] + : [trace.node.x[i] * height, trace.node.y[i] * width]; graph.nodes[i].x0 = pos[0] - nodeThickness / 2; graph.nodes[i].x1 = pos[0] + nodeThickness / 2; @@ -802,9 +804,13 @@ function persistFinalNodePositions(d, gd) { for(var i = 0; i < d.graph.nodes.length; i++) { var nodeX = (d.graph.nodes[i].x0 + d.graph.nodes[i].x1) / 2; var nodeY = (d.graph.nodes[i].y0 + d.graph.nodes[i].y1) / 2; - x.push(nodeX / d.figure.width); - y.push(nodeY / d.figure.height); - } + if(d.trace.orientation === 'h') { + x.push(nodeX / d.figure.width); + y.push(nodeY / d.figure.height); + } else { + x.push(nodeX / d.figure.height); + y.push(nodeY / d.figure.width); + } Registry.call('_guiRestyle', gd, { 'node.x': [x], 'node.y': [y]