@@ -3098,6 +3098,9 @@ function sortAxisCategoriesByValue(axList, gd) {
30983098            var  aggregator  =  match [ 1 ] ; 
30993099            var  order  =  match [ 2 ] ; 
31003100
3101+             var  axLetter  =  ax . _id . charAt ( 0 ) ; 
3102+             var  isX  =  axLetter  ===  'x' ; 
3103+ 
31013104            // Store values associated with each category 
31023105            var  categoriesValue  =  [ ] ; 
31033106            for ( j  =  0 ;  j  <  ax . _categories . length ;  j ++ )  { 
@@ -3108,7 +3111,6 @@ function sortAxisCategoriesByValue(axList, gd) {
31083111            for ( j  =  0 ;  j  <  ax . _traceIndices . length ;  j ++ )  { 
31093112                var  traceIndex  =  ax . _traceIndices [ j ] ; 
31103113                var  fullTrace  =  gd . _fullData [ traceIndex ] ; 
3111-                 var  axLetter  =  ax . _id . charAt ( 0 ) ; 
31123114
31133115                // Skip over invisible traces 
31143116                if ( fullTrace . visible  !==  true )  continue ; 
@@ -3118,27 +3120,28 @@ function sortAxisCategoriesByValue(axList, gd) {
31183120                    delete  fullTrace . _xautoBinFinished ; 
31193121                    delete  fullTrace . _yautoBinFinished ; 
31203122                } 
3123+                 var  isSplom  =  type  ===  'splom' ; 
3124+                 var  isScattergl  =  type  ===  'scattergl' ; 
31213125
31223126                var  cd  =  gd . calcdata [ traceIndex ] ; 
31233127                for ( k  =  0 ;  k  <  cd . length ;  k ++ )  { 
31243128                    var  cdi  =  cd [ k ] ; 
3125-                     var  cat ,   catIndex ,  value ; 
3129+                     var  catIndex ,  value ; 
31263130
3127-                     if ( type   ===   'splom' )  { 
3131+                     if ( isSplom )  { 
31283132                        // If `splom`, collect values across dimensions 
31293133                        // Find which dimension the current axis is representing 
31303134                        var  currentDimensionIndex  =  fullTrace . _axesDim [ ax . _id ] ; 
31313135
31323136                        // Apply logic to associated x axis if it's defined 
3133-                         if ( axLetter   ===   'y' )  { 
3137+                         if ( ! isX )  { 
31343138                            var  associatedXAxisID  =  fullTrace . _diag [ currentDimensionIndex ] [ 0 ] ; 
31353139                            if ( associatedXAxisID )  ax  =  gd . _fullLayout [ axisIDs . id2name ( associatedXAxisID ) ] ; 
31363140                        } 
31373141
31383142                        var  categories  =  cdi . trace . dimensions [ currentDimensionIndex ] . values ; 
31393143                        for ( l  =  0 ;  l  <  categories . length ;  l ++ )  { 
3140-                             cat  =  categories [ l ] ; 
3141-                             catIndex  =  ax . _categoriesMap [ cat ] ; 
3144+                             catIndex  =  ax . _categoriesMap [ categories [ l ] ] ; 
31423145
31433146                            // Collect associated values at index `l` over all other dimensions 
31443147                            for ( o  =  0 ;  o  <  cdi . trace . dimensions . length ;  o ++ )  { 
@@ -3147,18 +3150,14 @@ function sortAxisCategoriesByValue(axList, gd) {
31473150                                categoriesValue [ catIndex ] [ 1 ] . push ( dimension . values [ l ] ) ; 
31483151                            } 
31493152                        } 
3150-                     }  else  if ( type   ===   'scattergl' )  { 
3153+                     }  else  if ( isScattergl )  { 
31513154                        // If `scattergl`, collect all values stashed under cdi.t 
31523155                        for ( l  =  0 ;  l  <  cdi . t . x . length ;  l ++ )  { 
3153-                             if ( axLetter  ===  'x' )  { 
3154-                                 cat  =  cdi . t . x [ l ] ; 
3155-                                 catIndex  =  cat ; 
3156+                             if ( isX )  { 
3157+                                 catIndex  =  cdi . t . x [ l ] ; 
31563158                                value  =  cdi . t . y [ l ] ; 
3157-                             } 
3158- 
3159-                             if ( axLetter  ===  'y' )  { 
3160-                                 cat  =  cdi . t . y [ l ] ; 
3161-                                 catIndex  =  cat ; 
3159+                             }  else  { 
3160+                                 catIndex  =  cdi . t . y [ l ] ; 
31623161                                value  =  cdi . t . x [ l ] ; 
31633162                            } 
31643163                            categoriesValue [ catIndex ] [ 1 ] . push ( value ) ; 
@@ -3181,16 +3180,19 @@ function sortAxisCategoriesByValue(axList, gd) {
31813180                        } 
31823181                    }  else  { 
31833182                        // For all other 2d cartesian traces 
3184-                         if ( axLetter  ===  'x' )  { 
3185-                             cat  =  cdi . p  +  1  ? cdi . p  : cdi . x ; 
3186-                             value  =  cdi . s  ||  cdi . v  ||  cdi . y ; 
3187-                         }  else  if ( axLetter  ===  'y' )  { 
3188-                             cat  =  cdi . p  +  1  ? cdi . p  : cdi . y ; 
3189-                             value  =  cdi . s  ||  cdi . v  ||  cdi . x ; 
3183+                         catIndex  =  cdi . p ; 
3184+                         if ( catIndex  ===  undefined )  catIndex  =  cdi [ axLetter ] ; 
3185+ 
3186+                         value  =  cdi . s ; 
3187+                         if ( value  ===  undefined )  value  =  cdi . v ; 
3188+                         if ( value  ===  undefined )  value  =  isX  ? cdi . y  : cdi . x ; 
3189+ 
3190+                         if ( ! Array . isArray ( value ) )  { 
3191+                             if ( value  ===  undefined )  value  =  [ ] ; 
3192+                             else  value  =  [ value ] ; 
31903193                        } 
3191-                         if ( ! Array . isArray ( value ) )  value  =  [ value ] ; 
31923194                        for ( l  =  0 ;  l  <  value . length ;  l ++ )  { 
3193-                             categoriesValue [ cat ] [ 1 ] . push ( value [ l ] ) ; 
3195+                             categoriesValue [ catIndex ] [ 1 ] . push ( value [ l ] ) ; 
31943196                        } 
31953197                    } 
31963198                } 
0 commit comments