From f6625b341127806c5ea3361623692fae8e08c062 Mon Sep 17 00:00:00 2001 From: Adam Reeve Date: Thu, 9 Apr 2026 15:55:09 +1200 Subject: [PATCH 1/5] Plumb in Sankey nodeSort --- src/traces/sankey/attributes.js | 10 ++++++++++ src/traces/sankey/defaults.js | 1 + src/traces/sankey/render.js | 2 ++ 3 files changed, 13 insertions(+) diff --git a/src/traces/sankey/attributes.js b/src/traces/sankey/attributes.js index a2ee49f0083..c5bdc77508a 100644 --- a/src/traces/sankey/attributes.js +++ b/src/traces/sankey/attributes.js @@ -170,6 +170,16 @@ var attrs = (module.exports = overrideAll( dflt: 'justify', description: 'Sets the alignment method used to position the nodes along the horizontal axis.' }, + sort: { + valType: 'enumerated', + values: ['auto', 'input'], + dflt: 'auto', + description: [ + 'If the value is `auto` (the default), the vertical order of nodes will be determined automatically', + 'by the layout.', + 'If the value is `input`, the vertical order is kept the same as the order in the input node array' + ].join(' ') + }, description: 'The nodes of the Sankey plot.' }, diff --git a/src/traces/sankey/defaults.js b/src/traces/sankey/defaults.js index 4f6eb92d1c4..b6efaa55350 100644 --- a/src/traces/sankey/defaults.js +++ b/src/traces/sankey/defaults.js @@ -34,6 +34,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout handleHoverLabelDefaults(nodeIn, nodeOut, coerceNode, hoverlabelDefault); coerceNode('hovertemplate'); coerceNode('align'); + coerceNode('sort'); var colors = layout.colorway; diff --git a/src/traces/sankey/render.js b/src/traces/sankey/render.js index ab00a51223e..e6d00452073 100644 --- a/src/traces/sankey/render.js +++ b/src/traces/sankey/render.js @@ -40,6 +40,7 @@ function sankeyModel(layout, d, traceIndex) { right: d3Sankey.sankeyRight, center: d3Sankey.sankeyCenter }[trace.node.align]; + var input_sort = trace.node.sort == 'input'; var width = layout.width * (domain.x[1] - domain.x[0]); var height = layout.height * (domain.y[1] - domain.y[0]); @@ -67,6 +68,7 @@ function sankeyModel(layout, d, traceIndex) { return d.pointNumber; }) .nodeAlign(nodeAlign) + .nodeSort(input_sort ? null : undefined) .nodes(nodes) .links(links); From 3a9a834f2c05a5605b942b6e18a306b66af26011 Mon Sep 17 00:00:00 2001 From: Adam Reeve Date: Thu, 9 Apr 2026 15:56:18 +1200 Subject: [PATCH 2/5] Regenerate schema --- src/types/generated/schema.d.ts | 5 +++++ test/plot-schema.json | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/types/generated/schema.d.ts b/src/types/generated/schema.d.ts index 15fae6cbd87..9f88a45d590 100644 --- a/src/types/generated/schema.d.ts +++ b/src/types/generated/schema.d.ts @@ -6837,6 +6837,11 @@ export interface SankeyData { * Minimum: 0 */ pad?: number; + /** + * If the value is `auto` (the default), the vertical order of nodes will be determined automatically by the layout. If the value is `input`, the vertical order is kept the same as the order in the input node array + * @default 'auto' + */ + sort?: 'auto' | 'input'; /** * Sets the thickness (in px) of the `nodes`. * @default 20 diff --git a/test/plot-schema.json b/test/plot-schema.json index 6156b2ef890..d62b0ca6a61 100644 --- a/test/plot-schema.json +++ b/test/plot-schema.json @@ -50746,6 +50746,16 @@ "valType": "number" }, "role": "object", + "sort": { + "description": "If the value is `auto` (the default), the vertical order of nodes will be determined automatically by the layout. If the value is `input`, the vertical order is kept the same as the order in the input node array", + "dflt": "auto", + "editType": "calc", + "valType": "enumerated", + "values": [ + "auto", + "input" + ] + }, "thickness": { "arrayOk": false, "description": "Sets the thickness (in px) of the `nodes`.", From 599fa94d8f32cad7cb412ad78f96b904de0e8fa4 Mon Sep 17 00:00:00 2001 From: Adam Reeve Date: Fri, 10 Apr 2026 14:41:23 +1200 Subject: [PATCH 3/5] Add test mocks for sankey sort options --- test/image/baselines/sankey_auto_sort.png | Bin 0 -> 36890 bytes test/image/baselines/sankey_input_sort.png | Bin 0 -> 43179 bytes test/image/mocks/sankey_auto_sort.json | 22 +++++++++++++++++++++ test/image/mocks/sankey_input_sort.json | 22 +++++++++++++++++++++ 4 files changed, 44 insertions(+) create mode 100644 test/image/baselines/sankey_auto_sort.png create mode 100644 test/image/baselines/sankey_input_sort.png create mode 100644 test/image/mocks/sankey_auto_sort.json create mode 100644 test/image/mocks/sankey_input_sort.json diff --git a/test/image/baselines/sankey_auto_sort.png b/test/image/baselines/sankey_auto_sort.png new file mode 100644 index 0000000000000000000000000000000000000000..adf20ce19e375b748b784d0744834d11eb507f4e GIT binary patch literal 36890 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
BvvM?6w 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 HC7%C3Tn@hZ literal 0 HcmV?d00001 diff --git a/test/image/baselines/sankey_input_sort.png b/test/image/baselines/sankey_input_sort.png new file mode 100644 index 0000000000000000000000000000000000000000..6e9c96e78dbb4d3ac01dc4c2d42e1d2ce9df3f15 GIT binary patch literal 43179 zcmZsDcRZEh8#gD%II=QRRw{dDb!=s3@9iL=vU2Qsj8ue#WJ`$by&VdrjF7!YR`%ZS zeW>5B-}}CQ@ZmYnxt{yF?rVOp>wccAtI89>Xkl1bSVW2ncQvuFE-+$#@NvPFVMkmW zEG$wi#kW&Td#CqQdOyzrRrQ1Yv}yT2d$p0(Zl|S5tiqF4Vhpy05x)EHb*XLWMaG{FmXAcV(f>T> z;3fiV;Yu9~X4#7@h(Ax`_1_c!&jPj0(6sF8G+>eD@l65$EL`0ObpVZAtjHGB{)g#8 zz;u()OQ=?=C!|l|uh{-e5iBG(4eD@p0 zn{oVSU91SKbuY}vAL{-8tRR&a^KgM+sK)t%P>Tfm%uos%b_CXC_No5=k-8u%85)`Y z6Mf+yim6hzI2Rc+Y}pBOq=q3YAO4DuLJp0k8JAhect+tTd7<3dA9sLA@5mk*{$)}< z^$60J`X2%OBNR`tuEny2F53OFzuOM@2qxq8r^saEd#_eNMV+` z5cljm!9d;=<+hx0f7hihfqgF*tq&Gl6y$C4AJzafPsn-wXXI{gN%`je6%0lj{z?HA z1skdLxFxZjt=3#Kww=FMU2s_KzL_w7RdO#-l7``QuXVaRZxk=O5cx_WxNLvD9;$Z+z>?^#8| z@$!Px-d?YkTC=cEk8tzkr;uS0L$8{nyoT+HDe{!PyI!Jh9tF3oJKo!^xB4BmRwc6? zCW|>u-OX>c+eNH;jUP^>9KH7IUReapyM4>7-5?B^C>58|oiCze>*1Ai$zB$79Z7t=yz0(L!#`7m z>O8=anX^Bik>Z@f;a-8S$&^*iWEAs(9Ma`3oE3zJ+!k$mpW*0S7Q z{OOh?+Hi~NP~p>M7R5`C`f{INzV(2jW-T_~3fon`{IS9J1mOrZAB?CAfWp*1{meqa znuTUKnPh0eEJ*xhLGn0jz5is$EVN)hzTo-l$;xW@ZvAc@pM9d_V(DVt?${N{Z7oSk z=edsAZ^--ee#Zr;F}}%jl05Z$7P)2(5_Wh2tsAr7EI&OZTBus;W3$|{6PaG<$!b+Q z`mFZ(4vBa)OI<7bGxV;{_%4*$5y}?cte(mZ$;i&Ci|Q7Lf$AWT*qKBs@dCD6FYW8v zv{M;Q*BK%l4$B?xUHB$CzTdHTJbrp?R8V^$sl_sOda~O}UB4DA@Y#F0-`CDj@bnYI z$y!`bUgd!rspr&lmX)iK8gUGJCpNr|-8ypZbNm$ z9gNIL^soJ1R(spmq+K#>HhS`AK}Q)c{dYx5)$uCN=>|{h_{p%J=<&6LWap#3^??cp zv)W}lhtNPgl1wexfj6z$T3Ow8`ysEQPLEPfosW(iPIr5Xd$JGGB@dWQX?Gg={Psfp zL|8X}wI}p!IDap(?v$IZ8r(mw@E$+ttH51u=@%OaFFr}|+jQ9D_X&IO#@=x$<)dCf zOT!-Z>9wTpAaT2cqs`6;_)t?XOIx|u?uwCo<)L2yw$NaSWef`Ln0tJ*eS33&o7Uz~YBT3@HJ?Q-xAOGI`pR*hRmK_H*sm-P4fkXxt^!BHkZt z7n(Yp@~WTn3OH_}1$YDl3rU^G%~!>+O3*HQ5jrx|7k8S8j{Yk2Fx3{Q#r0>eH_vA8V{l}Y1;ZDa3_ z`}vV_ntCo|)VQYIIW=n7Hj=iU1x9fi?MgdO)Agh7(Wj?8^X{i3oyW$cr1W0Di?%4? zDM3*9^YO#F@hiyc+x<1;$1A0Y$e{VVg04q{>$g(&l`j$#x9IuK>TS%LMDXlK@jQQH z=DVM-%1F0pQ1YPpbYJpxF5hke=d?<4cW%WqoG0#@%yE|T+bCBXHc^uB#wD>hx!?OT_247>)}J@L}(Q2X;@UTVAH# zQ8QYrQ*4d*|1vko7k{i!Q#`IeK8~C+=-hmB(ruOLRO%ZibwJ0amVVB zY9ZIosz;|6L=u8O_qBYI`H=K}ipQ_F0{)JP*A)Zi@JAot8VPi{7acRPlQh1c)JPjj z$)Wq+>Rlb}?xgke6o(zSh$85j6z<%amq9m%ab3!PJAbzak!42Lv4;~u4&aslLz zjA;g^y}}8vxDgA?ko)fP(!EOY@GbZKW$k-YgxXHEZs2JCNBTniTcG8wJV#AD?w)p-4V$tLwllUe2F zM#1q=LB=7uvFYhSKOUV3Tps7y>AK{Jy!W=Ap9`(P{D<+ug+7)bw#7SHr+shSjyu=0 zhf6vo5+u|nuDN?p3;SAn3dX*|H=SVT*3$#Fdb;U7xMBJ0``bp!G2z-tq6JEy{0;uL zUXkja4QaDMRJH+fgof|hb)TJ*6r%7$;GEL=oTfe_KNkHSc=qEt_*W7JuS0$zpz@nr zJxVGKOmtZsu%8dK^(e(#(SK0TbJP2HZ#p7NO;GD8@{`eNm&g5}fLD-u2a(pitb~IU z=kCe-i;UxLIBMaItO`-r7x?hqjSW~v$R1YmckDKGsrpv0)0_%y9;?hHa;!w-X+35m zVe;xs7Pp<46X-86i!eLgHY2G&#UC^~nKh#yUn3fi4DY*WcR}vTLMeF{4cXpDzwH9t z6ieBx#A%}4J-5@9acI&L-G z+pGKoSeCzg3T1LX`4O-K_c5VC{$(s#2w-4BUWD!hDf2|F+)h7)OBuz4%SC)wxz!OyPM(Cdm8Hc}25VbMve zKYm}e^!c3Ubj3GzKc0+UVuLYk!)ZS7M?qTW{FfFDy z)4L(hI1-Vj#YqdswWr6c5fydIcD8saAHRHZ@vfA4yZqWmIciw%U5G1bE~g>IM8Had^T4IoHW2?U=Nh>xxmTbXN|%Ys~yw-Mr-y(sM7i83vu=%hG#P zLqrtqD^$uQwRCB$zSh&PFq?-2?;9xGz(K^jm?m)DaeWMVxa0AWp=6lcny!0t$GR6q zM%CxfOBu47<+_UK1JX{ikZX*Zu{UaK*~Kl`^w@c2w_m-^XWfz5!V|da0THrt@GewO zNr|Zu@|_LMr4yOsP#fKkq?6qIW*R5y=euKj@G8ZizVj&uvozc2e2kwV+qBK{cH892 z0dIHbHJAIJI2CTSecqDvW#O$Zb)0NMZaua0W=)mahvraAwT<8GlR_Ee%xm+$L?O@t zHpEJ;$@_iE4G8!ThtnO0tR)H>zR7J@1_!^x;hx(IxhxYfPgmfxyN#Uq=Mrph-eFL_ zY+)pKOP>c_$^lo3er>B(E7Tnr4(qAZmv6l4{%gL3OY3_v8Cet6@Vd8X#B~q5){>;@ zuyT@$4_5I6bhr9w?+@Qpbao9Q$;`ZeXvOfhg&+Bz-79aMxx;UR#qZMNP*J*}-|QYy z0(wt>yDN6rQ_szcgnd~9I;B@T zDO~Pa*5B>gyGrL8u-%mct-oixmHrnCcyM4cT|PLc7=@$NfloT%vzmcx^lFGS)lW3Jh-}Qm!km)ir)0TS4lUEGMwt zDPLA#NZ`8}q?#;to2%8al}VZZIHCr=?(_O3qA=N_a(UC;z9&;&X$|UrpSfSGG;<`9|pg&jb19I0F*lQP+bBsD*~V8W$=b? zC|>eg=Q(NKYKK-m6hn609u|<8kLG*$$-@5eyns;sSYGGb@=qrIajJLcUQK-FdhwS2 zjftQ`OStM2p`YQh`yG)VK48PQS)lnyr5xqI;&g(;BwsJ`xzcJST3;spy zyIu%>Zh$wQ$~E$t!4iGp$?jW5S3Y4~SXKw6~lDPPq>H^gN*%?IC4wDk`g z;m;ty0?};XzJ$~y+0~Iky#hc4^YGpaNCsKzW=o7N`~>;fofq&qi+objAx3u-K9fth ze^79GfG7C3#|K8skx6rQ4qirxC>P^|vgy7|r20Z)Ps_+N|C&o=4~s1$cF5e|eK@z9 z)ThhaW7C{c(o%#UDYw4azKe_^phnIweDArO@mQZswek~%uoxo(gqQt|BU&SG8}b!M zYbWJ$iy?&^X^C@@Z-|}#x5lJmR!OT&@nXB;h@+!*aaEH_ugj7Jy)lfh?QU%`w_Xe5 z%W2&u=%KEfuH=6 zN*-KN-k&59Wu_jH<`@qDxY4lls3F$JV~&~5XJ^)1?CTepS&!oEBYK>dmW;e%ntQ(A*_d82z@5Klb|{>{N6xr4o~J0uy8P)}oT5Buiw zhy7~iGvs^VNtvWNmOeeraO&RmG`D#|Bo{l)#C=V?CB`pvjO?*TlKihk715chw1@`{ z4TBNYe!FgdZfnPl9&F^R8I7B@V|$2d+Qz_DW?x@?CGYV~=YdL-sO!=nCReO;T_!3y zOMl_QUJer-CkkcQ4JJGDMm5@)PrDi%UukH)V#b1)I>dk-L}Q3oq)kq@O{ZNI`CTu| zKbaBn_9GYDPi$3~otjHJSgQ#}bV%eDOitl^fH?(%cTG1|%rdQ@t@6V3~pW zy~m9d^LPDU;lVpcMs0F6LRCAa>j5IEj4fwLb8NAG+aWSOCMpyX=DOh`RQ9?PU@uZ0 zz{FLmvYdrygXb0@*Qdp)xnM7PvbRD*-8R6_#O7&D8$jHq^(FDFrZ32Q+ zN6uaj_R(l$Z9T=q@2{(YmX!hk(^lvEGNn4B9xCM^I|Y{S-d!~Tv&qNXMSz8~V~>%C zTp=sm2^6%;)iRep684=I&Rh-F%xTlt2gsiWV+9uf)Man!f8jg|cUd&n1}unyg0;wB zR_`xbsf6+9Dq05W7z7qIMWBD}>&9H+L=KmKEl-dUn z>g=PEv>QABg1G;XWli?Kp?Ur|)c-|x%M5)92>bs>b`=U2Pse_*B@N>Bf7w7~f)%J} zRiyzK@?RiU2f)=IE$j<0>+15uzIO(#svCl?XKg0kaqP{ zTX1WS_8sA^f0>}L(LrN%=fn+joUspf<_r#x)&=nJP-e-*`M+DH=v(aIfk^_ApIDZi*@`TfcsyvQmat0^z+C4-(*t{A<5FHHju&m zzht9%{3*tJFJV^m7a>OD11lgycmvehlw;!7-^)^2;Ib+d6VoyKzC!4Z3;syu2Upt! zGARE5>fpmKW@zSLTnMbMM!nO25bHDI=w}$Zw%+Fd!vkwqHYmjZY+5zX#N~7N`a>AF z%CBN8`v=Wt^uvw-XuAiH!v@v1``<-j2=l&^>cPJMnRzeZKP;SW>U%&zkyThLH3E|S z9|Zn?>26T3Jv$@y|I$q&bPs9+`@=q5stb_bKg+=AJJ^Z-n|JQb{M#+i#^C>NGfS_* zSR)(!<^QxhP_;n!JVHIi{(ODj7|jfn*9u&Xu`}ez{IATVmLQ{JpRl^^%p=Y;^6z%I z0aI~fJ-UlZgZzW3M*{5Px`ReU))}8w{_B&Hio5Sy+G7i_@17ySHcA;EG<)6RtG+a#(b_joC>d9v6z259T z8B9I3KbH~#kZoIchyA7xnSJLDpLjez-CiXL-{0y{ z%bHEkjZT28Gc1<*9PSKMIa~i8s}s$;<vNuD|uK-hMKpsy5_YLKLPpUPG2PYc1OL>;S?Hm!D+rLZR=`l1cO@V*D8QpB*X@)?gtZ6caz>3#23)Z zH&*=S39v-Qd1SZiBkQrS5bBvtec{6ghS5v?1(?ML@hnRDeCW^CgXsTK8g*iHC)4I- zR-b%I-56Hba?&d-jygSe1QfRo6E?*}3*|mbB zELXO7GI1F2gS?(vNrQke+aKaW{z1iuh_TG}AxDl>5p$oS{y$wcP2_ynI4Gopfg zJPqVJ1&gIj%*+j`dJg0IT6Z~8$m5n4&Fet0K-mKaQk}h2MERi*%gyzg80j^9TIIJE z6oILY@QZT%^Pl;agFBL#(woLFQhuZzFYs0)kK3<*u&mLXW8?CI4UtXp;UzFvAr(7W zN*go(-S|}UmUs4Y0{RKkT?m0dTWuVoOl7{jjN_8ZEJ!o?#9@4y{K#+rRp&tD`p}n4 zY@qbVc>zj)Yn$hkAHuM-RQ2&yW`pOhTaU27={i!-ZTwE*$-jjY%0aKM^Rdit<_J z(8j7Olu4{|k`GblHz>a-`lnox!I!)j6h$l#b!LwV!Gx6;JRsrly<#8(HN1q#!Cw-j zX-2%n)%vja<&c3lr}2yYJv=1nbJOVfr?6#O0sT#NAiW&(jhYgeoa|y55MVU(&&j`7 zK>t*-8Y&TIex_^PoR-o&kfTUB?H&1NPoh32-i=9$oJ6#E7{n6aksLQbLNajVX?)5L zKG$_CAcWLd5WozD4%cFK2B%<-b99+rr0j8W%~NYEDc<~X2aN*k$#X7Q8k7}8Tn0Wk z_}9RfYnu54KS~HzWP&gwpn<7!vEk8i8R0;D{FYwi!k&%0-aA>7c+XrYU`f@Wu+p@BG@^SzAS23Wo zTPpscu-e-!TFeADd^n!5&`YDUK;qaBzGxciRX;>fh#UAZMY$Q_D^gKqm50lGCF~(@ zcO#rwUhv^=o_X-2o9K2XeTJsPh2GpnT|E#UD(_9GVpS~}G=S}oh3Y#hJwv>pNV5R0 zU)nmbM%`)qbvDfiQ;6_^bDrF{+7%GkaEPypMAk>(H}J4)v2kFA3rZP5Vv7Aug;L6& zj0jF_&@}*BJ%t0&vXjc`7OzBla#T|!=u}iICJHh6w;bdRw+YNXqP?2iH>>x9F*5k_t5&ZM8-xGb=6UF4lc zWJ?JROk3HXkS3RC+U;dJ6Xhf0kGHD*3;Hnm+i+%qYjc$|g+o*8JGDL&-hf7JHaTv6 ztT7s1{e;GM>Qn(GB!{|2twX@<$e=WKR`9HJCfUby-`<0~1vr9@-p8x@D?bCUCjGam zm0w=tCFQ26LySW8NcX4P^B#l!6bKwPeKN-;#~a7qT+fZ=fIXrDb}$Qa6h7^CIh`r2 zcV}xR8Iz36zXD9jcP0NSgWzCiN;`!bHeqX}>DRW~Kv4mL)Fa|A)Ym~+m8aqart*+N zD-)kO%(Rd(@#9lvEBEEM-g2l{INqix3m7kL(-5hzJXJ|htP-GWV+QwFK^HUS`6you_wyS{ry|;+lR?vF4Zd|d zV-TRLbvXD8#*UM_<~JVMXMkNT2P#M$pDYP$IAD;t>>)wpn$@# z;6Px~!DtzMMl|Vtd;uK1CelYN_$1%eTm{|*I?%dd;_VRWgxf7@4{wJwp|ufNY$%Kc zR1AfRQO^VU?7Mr7>A#|9i0@6W|5bKcV7Oa5@GkPttT_(e|vPH(*$fo0Ys3P(Z^+X<~(^ua-t6zinu>FFVJauVga2> z13DElkPP&|lx!^!0-L#srh^eMjTG@#1bQ-J{9h<|0QZ!q4JII9Lp_<$Q%L*Pj^&*;Op5Fs@V%2#_K13{Cw^1hs<3FS)LrcNiK?;Z1p}%Zh=U72C(Te`jwFcbef_dSJ0)ur5TQbzxxv}$bJ*3Nd6LN_hU+}bEF^{X8iKDb{i@hF zd$0>R0!~HPv!v^=WMqxKWGVny`(gNb1G6YlkXoU%vQ(Qv3SZ+*MS`gaE`k_%c`PHU z(~#|4`ur$z7S+#ZVC^wx3~5UlnC`8IYQWhDQWY-3C^RSb)~6>ED5;8VIin#lU~9Ci zJ@OJU>L-Q*T^ca&;6@MHyo9GqDOe7=l|a%bl&MSBJ2>DD0c^h|>O5J_2+Zx~*i9{% zNtD^Pm?E1W@3y8BZ#xIfaTqT*=`F8Ke!?WrO>cT2?5R>;apYL@vG3#1q@2wrebHl7 zjAHcuo+K)~vpUYO>bqMrUEz0FLBz1nU*RJ#Gy{6HcB`x5Kq68lVDBGf09D?Bj%Z;+ z?FlfWLiwh3v|vET?`p%*w}z`%gdRTw0B9V)mC|*^CyxkES1ZuT;$8vG3&-3cKVDSr>$*xEIguq<@J@6-s{Pu>YHHd)RqWis~6UhDr{MWp1Khkd3?4hsKnB3o- z`)DBj=%*-l=lg#uW(sviKNN>vJ`RbT#Qgj(Kir785Uk}AphAqiznsJ((g1M*VC=Ml z)tgoF7}o*x8VLzgw*z%bzFC85b+HiwtR7RP4J=zOfKQpR-E^f;syH;*=GQ;}$Wf&j z1;P0#pz-v@-r2C2R6jIs>UGlR4!fHg-y^`dQD~B=Te+#oF2)SxfZqtin(jH%x=}Jl zZ(}ekV?x;E85v5=lNtJ>##tyLJ_P;sHOn+8ggmacS%S?V!Fk~e0}5&MWdq}TC@Byo zjR|90neN9+W+`Jt9|Lr9jbn)E#pb<&wDWcHA|c0M?r5uZv}ETl`Zf4I2!GhOeUIE7 zb&dy$ES(m6+2o~O45)vKw(ZY1nOyb=L9GKdwowEsd+E)UGq6SA25*a8P-IIhO~T<5 zX&n86Pw$XaS=8?ps6bw?1j-pU^K^sz=emDz1HJ4)z=ZR~H>PnjoO|LUjKTyM*A`W= z_Zgco3grn<7B(Vt11P^uf%PcjuwRu@>V{AO&B7$JmtciY=YZ7gELz|G$mK-Xtr7|cq54dg+W+S<=N1BE)m9Rz`6~%amX3E0*uq`db?#igsWK*y& zRiiTin+O1f8#dQNF|GhGY=EO5-BBG`94*}X#FG^e&;$goM<@KjW6%Q-P}DvL?S-(q zG$U}o9dv_)u`Hu>>Rf)T{^-FHYm7p8F9PvXxPvNWM)0~s8bCQYt1v!+0tIHITHfBW zexZ5w8&GQKB@muI@NvF4d%P`_bB`CI+-#xL$IG)H4GJoKus_o+6^rNeky;Z6+e={H zrF=~VR+Ig^h*^LYGrIbi>w(8P$j15#%R#f!ZFTHY%)mQfoD~2w8Kqj8To;eQJi#9# zOCjR9Ws@l8QT$A{L>ahDJg@-_UE&#FR8kcUV@pNTKx$lT=mUBOVS{AzIIr) z~iw4o7i?%SN6299>mF0?v0L&LRN##RV&*zYo9&u9ewe!Iuho zVWk)y`seYtP}8juhbN3lWYrar3<_R<Ml5#)K?C z8a%+jK4=oauPX|G7p)-1d^08b24V~sh>V8lCtBw=2JT{PCBZloFo8DbewQQz$Q%R_ ziYgb*g!3&BBojf-tAk*Wd9$o69)`TBzEelUXyqV{p@z{ySsV;hq*q{?r(l=+6aovo z4uY6s%iKLi1lid(=Uhj7l8!M10ZY@Y%MFFVMgVSDHTYoz(LS3d_T)Al<=yot*=1v1L-@s#ET(tBisJFR(ar&}V{jg^s8J;`1mpnE#ss z9!y;1bryJ(DR8=;*~?Yu`#-OqYG1QDS|iMDQmtL_(8vtR4pyIy+%&v>PQH!H5yaPl zayz57q7gwbQASz_yA8D9Nx&BGxgCI<=v>Q8YO0+bBXay9;?%&ACe}h&N@3@>Z0S#6 zATSWE=~I68fYL%3sPU-!b{s~)Z*atNAud!1iqG4OE+@o=D>}drYiHcZ3;DA{q!Y)| z_G7h!5%Hd?0GS02H;VlISy7D<-3lQF^V?Y-?ms5?0BG)fywnnyqn2Gq|5;uta1>zJ z_BqIL{x}LIV28nvsR%RBYY+(xB*f}ygaBHC36R5Pdj%kLDgjf^`BhwaM#JaQS}ByA z(VJ8TrppqCXIE<$w>n2vN&fQSLi75+vb2L;1bJ4`7b>OzqphMdu!{>pMf+ zZUBwf^D+P<`127`+}3oGzTV1-B8bf}slQkNA1)rAWm_~GpU=To9G|7!_hfO=UmZzT zHs?Ac0Q}c7)f{R$SZq~f(fmTc?4eGsLCMX&JR|De5ofg#aGs#ZX}YCywf=DGpWd@jjQ-$dCcfBzDqWgsu`G=#ZakjwgETMgfu&c zBLHlH)38eDf1v}0`!yTo$^b?XnSzBf-mU`N0rdvarM0qW}n<4ZIs9PWUnq zY*dF((h4VO7Xb_FeLBbTj0>u0eHRWJQW1Rmd$F8~5o(M~air=Z!b$5u?K3BX`H9A0 z{I74SyZ}j8>1zq|rXa?duq*v11+E>^Z#TUimCqM{(|=tI`*B~cftxWkr#@+@eK3g( zer6EGcYN(2uJ8D41Edoo4}9~MU%g=KGR`(8=}vrY#HNme+BsFCOxudZI4m0t|Bl;9 zuJ8in%EIsN1r{vcHYxYi^n3cL7%-Gqy7f)}0)=x%vJY(_L~m(9!P)qn9lHA+gBE0^88&xRf$auHQz)B#%UwSU4t1-qkQ=CkW#)?s_3pMLrmxr=` zq~~A$Zq!y@?zN4X48d{-Qpoht?!bzk1a_vyXr)uSH?-n2fOf&Aq_>pk*b!D*raO&XVrCP%mG{ZEz z(kzDv^%4m#Be(QtRMrp=FVacL@m0c2^mvv`E@JnQ@Ex@5vM@U+Z(C~T(`1xTEW;iT zmvaHF$xl9H>km!IMpv|E0u?ExbL~4Mo zkToXBlN!VUlqxH=NGm?HXR5BhQl+8el@mye*DQ}Mt4)Hfl}KZ;JOjU3SGVGV#~Wmz zBQ4+R0G|4zVe{Y1W$a>|rYIWk`#zr(p!j)g-psyuvE6{f8L zs;UX=K=qDJB9xfo(Pg$fMxb~T2eqK?(|3k)(07YCxRE&(h1*&au~?x^mwzHC0>jAx z+Pb1;{B_nNQ*FJTph9RHv>k0U0p6N<{RtkIef0!9>*nM^>EO?gdV!?fSv_9BZ`y$3 zK>)F5`vZqlO%%eJYE_3z_{kuBeLg(`7ejc$Lr!q$cK#u2DhLNh-<^7(eR5>;MAtrv zQcezn!vxJBjSf|(_?9Y_2jWJVy)TE^18n&1K>_wA+#YEFopRm1ynrwlam!Y^lob+P zm2{}bDQU965|uQhP*l_>fK_>GaA=AGo3@^->{_z`(!-cy8IF ze%vKlcJ&M;?MYCQ6g}$CSL$t6`fs)wtLks7VSId_9arxTSi}|^RqhkKB$@Ds(W-+G z4ghL`QF7?gomfr-&7-Ei_d)fF<|?#952;jvkEy&_BxOa3&=3i&pKDK`9^7KfR4w97 z?2_JN3?h{qD9_z49r;N$!7YvH1J3ME#QoHLl;;Wx58_O#^+StFai9DO$l=a%C^)yU zv-3V#1r-m(^6-QRv28>RoSxG}`xgLFQUrdC4}0i1JRHNJhg&gq|A4|7Z6q1!HFK8V zY!Q8NXTYLL=HH$I;c`Kgx#xD~W}}G{rio}wCJw5=tD>%);q>CPAtVgMEAh^26OEX3 zuFGK3Bxd*bAbE}3Dlt{b3IJ++{IGvTVZZFYv#Ci|W2 zV@?Egldb`DvsFt?oKj6}{jM5)%KmrjDS5v``RU`+x#KD^-t$bSRKEF&VOR}l zUJQ$ht&_0gK5b7B?pf9F6^^c=j}@oJCh2Adt{@^+T%`&J|1y#kfWaSRh2AxmW^>xC z-So{JM_ie65$>kl87aDm$E)dmX@f=`z`h5y>b~V z2^US;u}<+3nlBZ09aum+%ck_tkMw-CW`Lhu4Md~)JYMrR;cPY$P$$0G)FN)eV+xXz zxlF(k6b%Z#_i3}ed22Gyn7)^8peK*^H!%esI@s~9{5+V=x3#e-;ptI2XDLgNQ}>^sAw#C6f&hz!=kVC~cy;DV!s5qdAo0t1PO zXu|Gel9v}^BmuF_J>BYFlidsOBU!bRwwz~_+N3%NZ` zSr^pglO=y)f^*M03n?kiUSfx2K@kz1-;TK%{5Xu;Q5k*|Cgw=r(duzq(mXg^V)DjP ztu>t+d^vhp_3lv6iPj}--vY-sqH=0~_yaHh#L11OIK(Z<5*<+M& zV}O4nD{c=ZK3&*jUQcP7$rVkU=m#C69YVaH$7$$kY!U32{Ah0LQPI$tq;f`owUu8k%{j!3K>0H8 z)AEam=zoXk)@mCUnqRM&`dR7;`cD&O;P9#J`e!S01Razq06Ks}0KwA2!@m$F;#lC- zr$$PFe-WVPI29Q;lzEjJr@j$g5yD}nG+wu4=reK*VGEB@d2XS~o#dC_)ie1Z+P_1R z8H$6IdAQaZupo)-HsFz>N$pW(oM^;{H2P1vG+{GeQ0B0pgCzODkC7*rbr>%SgtH6a zLX!cXJ+b=V&>wJmUW-VWqnx$EIXTr;+mr{12(1oPD{5g|^8Ra$s|rmDeoE@AB^#ni z4Y#&+3wK~hc@WF#`pYBYuPb&HIczsJ$!1bnq5LI{gCLn#e>`Wo%G(W83cjN(Z_x|# zMe7tiznRKua%_JMs2npsPME?Pq7)U04kUxsKe*C_d+7YQqnY(Cm|~MpFdGZH0G|%R zg3lw5N{A)t+`+2nOH?J(vBO|p3v-Qg$~;pZXPRy%a{=3*R61^AAc#-~ckUXJ6yKdx z4j(s&yzP!YQ>nUy97S;?`U6BdWMkJ;o9PHstlE%*L}oAPn=I`Kw?OSomI)Q2H=%*+ zNPK=HTdWpR299P@W=ie(uHy>-VeG_$)l~$fttymcm*3X2o_V38 zlnFj9HXm1_|27=HX-04nIkND16C4L>O_uNbYHf$zxd|WMK$wL$7Kz+!{Uw(8+F1*? zO{R*KVfOv^qo}N--oOLuTwBg?0L2)kc9l&BkZEaFp|$1%baNe##IFUd371>wl)zzI zm|-bB-?NrGsP&v7VGnP`#E>oj+Hw3ShEti^DqzG-ia|~J68$@Ws(^@BK~(|f@BlcH zL5axWTKW~oZ#1M7T{!Xm8e*m)NVeh&z`en3sSk=+&r8^_8z?0Nbli=wM4~0TgybAZS-|>gM$f4sS)m??VcGg0ZE0R7R*K zP_x2%D5%aSvQT|E`Xo)&r1l|WL&>s3)y7tna-1Uy8O9mqr7#LigCKXOP~iOWrPrm- zVzJ@SkC(%j5Pa~^?y68rBRoeI=!@%JS;YW%#96gHhrGVr^S9OKRGsrl-hgMeUN-PI zYIgQAwP%pr(5(lpRAzu2$VIL1!wK|3gG)Vi3!)hHx!PsPVr8T%qu}0UcC=T}V-P#t zPjmRA`}x_`uY{<+t7hk8cd20zOzk=Q?aiB_`3#O*4%+%dq?&L$LSsrmRL8K}6GIe~;EaWc#sGxC z`$;y*T((cc`_TAO~Oz&N8?f&n{_=l{#pt=_by8gVUsCx7W1n}p} z!xbUSOrx>f`}YM*{$c^E>r19j&ZiX4`d3nRIQUE;U2{=UATc}w9@iG%3H(_oE_>c6 zC}yV|s6G?JmLUS1&6;f58v8&lQz;s|O5T0Np;MC{h{|KAEeeAt?i0AbHzfQXFUX-= zV7jcJfIMvg7(**&dJ2S(rIW8>fsh-(%SXRY57jfc9pQIBTy2!k&uu2 z0_S+k!)v?_W3`ww!zvGl#~+%41Jp!JwYKJd_ofCZ=P?%1aFT3-I>C3>#pswc0wf?s z?(0)et&d8LAh}R;75r7|?mTCAW9SQR0Izrw8c1L$qm&3J%J>0_@Er6-sLR}A*r_Xi z&93N!@-kPuE;kI)4xqF6m?xs=%V6g&1dvMHEo;^0M+S+D%OLjy-30wah)%=xzCuR8 zT!27O^Etu?0KbvsH@h%48G}Xjrx);u-#h5L10Lbp{c!e3Kvwf<{IR9Wxed|CA^;G@ zXE#);QNETT1_eoI47aMak3w?mwmysk_#4gM*dh#GuZYc&A$1ui>iTn+rM~8g3B=_W zM$h@5Sm#okdGqb*KZh9*K;^)Wgau6BJGbRt9Rxt(ihPd`;&{zvbnszj5#S_mCNmQl zm1Ffb;7Wxg0Y3r%;cWJYNlso~-pKHvuq)PXX?pG74I@EYrUgu#dAcZdrh^{KibQaO z#>&nb$NBxhg~!2N9v1S}VXO&-29tM|AgP?Jj-*F;y+{U`xu@z1!4fB86!41ThhelS zmfOUz<=va=??9~y`hqbNBfZ;&Yp{#|yd(kB)W{-+0>hv23PRcpbgbkOPO1?4G(@^? zjbwcQ!hTmCHv7l$5dgK1m+JXwfVfybL>x$OD`AsM`u3qt~kdV#bHum=Xls5HU*1SlqmU~j`?rkTXGLm`6@ z7x_DeLC%{p7=DVQ)O|6>eC1F)4NI~$@FDo4UI?zjmmS?lf<+R?|ZVG0+38i({0 z4+$VER>00xJN(8BwxVbW^|#^p%HVL0ZoaWWNKWj#@LGp2Af@Xu+IiB-xf-kU;=xB9 zCNL29(4ONAUQLy9!vWrf9Jq_sjz;l^Mi7AODUaWpshUd;t@GN&4ec9-M~bpVmVlX1 zYju*dnb1@z6R2*kJ{f2t=RMjcG+AYq566-I9K0B8pE*R4PYg!NUfRl@o6LL#V3kEV zu4~o8{lpy8WlTHR?3854Qca?LK$xPLDhwnzCgMc}eaMa|1AAi+0i{Zq;G@3YyrGO7 zp4H2kCdO8{0T`bo=?ja_fl!rifvRQ>^)#B4U=a7N zsMsw1SR@i4Lh};!0J1u>Qaf0#X&v1Ab(7HgLFsUjWo!5Fu04o~V9aPVOVfSmPu=g6 zm%?(^Aox%M`b=NmZNaZZm#tWLCcgwdsf?ZyfJjr+zfmwSDvp~K@~0><;l#9^y59PG zaj27`*t9ZnD(1KpoH*q|Avh7BL6RjslkvtB*7rh0_M_}wVZXoqvOlZxfUV&M13aXC zGcs60SBJ3molD<~+O;Oa1pzLJxvHGLeoq%QkPC?$MPRzmn5a^K&kN)C*qG6)-?%df zrGc6Y1Zlj&6qY_&E}3>Qb*8Zm!Vr^-jCI-m)_-QNQB#CrSA@Aia?(2WrtebuHMB`- z_|@B&IF0924QpHR&B!$kZ-)=}fgD#erMx`TRt5dT$R9=~N@8 zPi84Z+*XXQN_d0Gje%F(4_KmW_ohM@`g1v$;u67|3BU>XtKdMVO-7Wx(IucSinMJO zf4X%yu=@f*5Y)+e?P6;-fdL|(;k)%+i+em)d;1JFSj^4}@Nd%QmQydcAEi}Z7y=W* zgUKK_-vTGfV=-Lb?FF4SQ$p|{+x53lZwSizYj9Q+= zXrg7#n%Si+h2ShHrm5g1TJz@rZtyVU?;)W$n5@P#5>}e7qmJMN7O5{&|M$d)I2l45 zf0YCr*Hi15Q{1?;CITx3{dC**Z+Uis3L;e}8NoD8pa* zWJ+H-7rfkzg?ED^_^o(Tk^v#x11SshZJCV@y z*XKx$;s7TOKC2e2-p+e3MF~;3aivA+Zx4SI6aY9F!G0a(*#qwBzl}Ev74+F45$JG) z>wk;oT3S{V2R+*vaE#?^Oi$pSF$QK7ZOVhj04SejOBjetF3>h0b~d*|1JCpL{*Vo= zol8J|v$uFfxB3(kn~Hf2m9_86-*@}?kTQA$Fe#J7dM6qP_3Ri&qv5KO)oUQuE^BNxAn9y$)Qx+X&ep;l2IiOrXmfOW5+`WkpYID} zA!v9Yl=|>_=1xlSw53oTfJD-MRmGnhwha8&fOsT?1G4l|p(tXA0-?3j-~KgbTnz~Q zT7HNwqcvE0M=HH4DjDDX(wXn-$1h~`S?tX&@EBtOi7w`CMiylu8E2l9wbH+tBOi

*oVARbs)OmZL|EdP(=-o9y;Dx~ZpMSg3!w_(0 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 Date: Sun, 28 Jun 2026 21:39:16 +1200 Subject: [PATCH 4/5] Only call nodeSort for non-circular Sankey --- src/traces/sankey/render.js | 12 ++++++++++-- test/jasmine/tests/sankey_test.js | 21 +++++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/traces/sankey/render.js b/src/traces/sankey/render.js index e6d00452073..f98c8a3d931 100644 --- a/src/traces/sankey/render.js +++ b/src/traces/sankey/render.js @@ -40,7 +40,7 @@ function sankeyModel(layout, d, traceIndex) { right: d3Sankey.sankeyRight, center: d3Sankey.sankeyCenter }[trace.node.align]; - var input_sort = trace.node.sort == 'input'; + var input_sort = trace.node.sort === 'input'; var width = layout.width * (domain.x[1] - domain.x[0]); var height = layout.height * (domain.y[1] - domain.y[0]); @@ -49,6 +49,10 @@ function sankeyModel(layout, d, traceIndex) { var links = calcData._links; var circular = calcData.circular; + if(circular && input_sort) { + Lib.error('Circular Sankey diagrams do not support the "input" node.sort mode; falling back to the default sort.'); + } + // Select Sankey generator var sankey; if(circular) { @@ -68,10 +72,14 @@ function sankeyModel(layout, d, traceIndex) { return d.pointNumber; }) .nodeAlign(nodeAlign) - .nodeSort(input_sort ? null : undefined) .nodes(nodes) .links(links); + // d3-sankey-circular does not support the nodeSort method + if(!circular) { + sankey.nodeSort(input_sort ? null : undefined); + } + var graph = sankey(); if(sankey.nodePadding() < nodePad) { diff --git a/test/jasmine/tests/sankey_test.js b/test/jasmine/tests/sankey_test.js index d9bd928148c..38a50e85eab 100644 --- a/test/jasmine/tests/sankey_test.js +++ b/test/jasmine/tests/sankey_test.js @@ -501,6 +501,27 @@ describe('sankey tests', function () { .then(done, done.fail); }); + it('falls back to the default sort for circular Sankey with node.sort set', function (done) { + var errors = []; + spyOn(Lib, 'error').and.callFake(function (msg) { + errors.push(msg); + }); + + var mockCircularCopy = Lib.extendDeep({}, mockCircular); + mockCircularCopy.data[0].node.sort = 'input'; + + Plotly.newPlot(gd, mockCircularCopy) + .then(function () { + // The plot renders successfully + expect(gd.calcdata[0][0].circular).toBe(true); + expect(d3SelectAll('.sankey .node-rect').size()).toBeGreaterThan(0); + + // An error is logged about the fallback + expect(errors.length).toBe(1); + }) + .then(done, done.fail); + }); + it('can create groups, restyle groups and properly update DOM', function (done) { var mockCircularCopy = Lib.extendDeep({}, mockCircular); var firstGroup = [ From ff49808dfa7d25696d8cde0f65b61c80f43d66b0 Mon Sep 17 00:00:00 2001 From: Adam Reeve Date: Mon, 29 Jun 2026 14:02:50 +1200 Subject: [PATCH 5/5] Add draftlog entry --- draftlogs/7873_add.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 draftlogs/7873_add.md diff --git a/draftlogs/7873_add.md b/draftlogs/7873_add.md new file mode 100644 index 00000000000..6875cfa3d43 --- /dev/null +++ b/draftlogs/7873_add.md @@ -0,0 +1 @@ + - Add `sort` option to Sankey nodes [[#7873](https://github.com/plotly/plotly.js/pull/7873)]