@@ -611,31 +611,43 @@ axes.calcTicks = function calcTicks(ax) {
611611    generateTicks ( ) ; 
612612
613613    if ( ax . rangebreaks )  { 
614-         var  nTicksBefore  =  tickVals . length ; 
614+         // replace ticks inside breaks that would get a tick 
615+         if ( ax . tickmode  ===  'auto' )  { 
616+             for ( var  t  =  0 ;  t  <  tickVals . length ;  t ++ )  { 
617+                 var  value  =  tickVals [ t ] . value ; 
618+                 if ( ax . maskBreaks ( value )  ===  BADNUM )  { 
619+                     // find which break we are in 
620+                     for ( var  k  =  0 ;  k  <  ax . _rangebreaks . length ;  k ++ )  { 
621+                         var  brk  =  ax . _rangebreaks [ k ] ; 
622+                         if ( value  >=  brk . min  &&  value  <  brk . max )  { 
623+                             tickVals [ t ] . _realV  =  tickVals [ t ] . value ; 
624+                             tickVals [ t ] . value  =  brk . max ;  // replace with break end 
625+                             break ; 
626+                         } 
627+                     } 
628+                 } 
629+             } 
630+         } 
615631
616-         // remove  ticks falling inside rangebreaks  
617-         tickVals   =  tickVals . filter ( function ( d )   { 
618-              return   ax . maskBreaks ( d . value )   !==   BADNUM ; 
619-         } ) ; 
632+         // reduce  ticks 
633+         var   len   =  tickVals . length ; 
634+         if ( len   >   2 )   { 
635+              var   tf2   =   2   *   ( ax . tickfont  ?  ax . tickfont . size  :  12 ) ; 
620636
621-         // if 'numerous' ticks get placed into rangebreaks, 
622-         // increase dtick to generate more ticks, 
623-         // so that some hopefully fall between rangebreaks 
624-         if ( ax . tickmode  ===  'auto'  &&  tickVals . length  <  nTicksBefore  /  6 )  { 
625-             axes . autoTicks ( ax ,  ax . _roughDTick  /  3 ) ; 
626-             autoTickRound ( ax ) ; 
627-             ax . _tmin  =  axes . tickFirst ( ax ) ; 
628-             generateTicks ( ) ; 
629-             tickVals  =  tickVals . filter ( function ( d )  { 
630-                 return  ax . maskBreaks ( d . value )  !==  BADNUM ; 
631-             } ) ; 
632-         } 
637+             var  newTickVals  =  [ ] ; 
638+             var  prevPos ; 
633639
634-         // remove "overlapping" ticks (e.g. on either side of a break) 
635-         var  tf2  =  ax . tickfont  ? 1.5  *  ax . tickfont . size  : 0 ; 
636-         tickVals  =  tickVals . filter ( function ( d ,  i ,  self )  { 
637-             return  ! ( i  &&  Math . abs ( ax . c2p ( d . value )  -  ax . c2p ( self [ i  -  1 ] . value ) )  <  tf2 ) ; 
638-         } ) ; 
640+             var  signAx  =  axrev  ? - 1  : 1 ; 
641+             for ( var  q  =  axrev  ? 0  : len  -  1 ;  signAx  *  q  >=  signAx  *  ( axrev  ? len  -  1  : 0 ) ;  q  -=  signAx )  {  // apply reverse loop to pick greater values in breaks first 
642+                 var  pos  =  ax . c2p ( tickVals [ q ] . value ) ; 
643+ 
644+                 if ( prevPos  ===  undefined  ||  Math . abs ( pos  -  prevPos )  >  tf2 )  { 
645+                     prevPos  =  pos ; 
646+                     newTickVals . push ( tickVals [ q ] ) ; 
647+                 } 
648+             } 
649+             tickVals  =  newTickVals . reverse ( ) ; 
650+         } 
639651    } 
640652
641653    // If same angle over a full circle, the last tick vals is a duplicate. 
@@ -663,6 +675,16 @@ axes.calcTicks = function calcTicks(ax) {
663675            false ,  // hover 
664676            tickVals [ i ] . minor  // noSuffixPrefix 
665677        ) ; 
678+ 
679+         if ( tickVals [ i ] . _realV )  { 
680+             // correct label 
681+             ticksOut [ i ] . text  =  axes . tickText ( 
682+                 ax , 
683+                 tickVals [ i ] . _realV , 
684+                 false ,  // hover 
685+                 tickVals [ i ] . minor  // noSuffixPrefix 
686+             ) . text ; 
687+         } 
666688    } 
667689
668690    ax . _inCalcTicks  =  false ; 
0 commit comments