@@ -657,36 +657,8 @@ function isClose(a, b) {
657
657
axes . prepTicks = function ( ax , opts ) {
658
658
var rng = Lib . simpleMap ( ax . range , ax . r2l , undefined , undefined , opts ) ;
659
659
660
- // sync ticks with the overlaying defined axis
661
- if ( ax . tickmode === 'sync' ) {
662
- var baseAxis = ax . _mainAxis ;
663
-
664
- // get range min and max to find range delta of axis 2
665
- var minValAxis = Math . min ( ax . range [ 0 ] , ax . range [ 1 ] ) ;
666
- var maxValAxis = Math . max ( ax . range [ 0 ] , ax . range [ 1 ] ) ;
667
- var rangeDeltaCurrentAxis = maxValAxis - minValAxis ;
668
-
669
- // validate that the axis has values before we try to use them for tick0 calculation
670
- if ( baseAxis && baseAxis . _vals . length > 0 ) {
671
- var _len = baseAxis . _length - 1 ;
672
-
673
- // get position of first & last axis' starting ticks
674
- var firstTickPosition = baseAxis . l2p ( baseAxis . _vals [ 0 ] . x ) ;
675
- var firstTickPercentage = firstTickPosition / _len ;
676
- firstTickPercentage = Math . round ( firstTickPercentage * 100 ) / 100 ;
677
-
678
- var lastTickPosition = baseAxis . l2p ( baseAxis . _vals [ baseAxis . _vals . length - 1 ] . x ) ;
679
- var lastTickPercentage = lastTickPosition / _len ;
680
- lastTickPercentage = Math . round ( lastTickPercentage * 100 ) / 100 ;
681
-
682
- // set current axis to have same starting tick position
683
- var firstOffset = rangeDeltaCurrentAxis * ( 1 - firstTickPercentage ) ;
684
- ax . tick0 = firstOffset + minValAxis ;
685
-
686
- var lastOffset = rangeDeltaCurrentAxis * ( 1 - lastTickPercentage ) ;
687
- ax . dtick = ( lastOffset - firstOffset ) / ( baseAxis . _vals . length - 1 ) ;
688
- }
689
- } else if ( ax . tickmode === 'auto' || ! ax . dtick ) { // calculate max number of (auto) ticks to display based on plot size
660
+ // calculate max number of (auto) ticks to display based on plot size
661
+ if ( ax . tickmode === 'auto' || ! ax . dtick ) {
690
662
var nt = ax . nticks ;
691
663
var minPx ;
692
664
@@ -978,6 +950,17 @@ axes.calcTicks = function calcTicks(ax, opts) {
978
950
}
979
951
continue ;
980
952
}
953
+ // fill tickVals based on overlaying axis
954
+ if ( mockAx . tickmode === 'sync' ) {
955
+ if ( major ) {
956
+ tickVals = [ ] ;
957
+ ticksOut = syncTicks ( ax ) ;
958
+ } else {
959
+ minorTickVals = [ ] ;
960
+ minorTicks = syncTicks ( ax ) ;
961
+ }
962
+ continue ;
963
+ }
981
964
982
965
// add a tiny bit so we get ticks which may have rounded out
983
966
var exRng = expandRange ( rng ) ;
@@ -1231,6 +1214,48 @@ axes.calcTicks = function calcTicks(ax, opts) {
1231
1214
return ticksOut ;
1232
1215
} ;
1233
1216
1217
+ function syncTicks ( ax ) {
1218
+ var rng = Lib . simpleMap ( ax . range , ax . r2l ) ;
1219
+ var exRng = expandRange ( rng ) ;
1220
+ var tickMin = Math . min ( exRng [ 0 ] , exRng [ 1 ] ) ;
1221
+ var tickMax = Math . max ( exRng [ 0 ] , exRng [ 1 ] ) ;
1222
+
1223
+ // get the overlaying axis
1224
+ var baseAxis = ax . _mainAxis ;
1225
+
1226
+ var ticksOut = [ ] ;
1227
+ if ( baseAxis && baseAxis . _vals . length > 0 ) {
1228
+ for ( var isMinor = 0 ; isMinor <= 1 ; isMinor ++ ) {
1229
+ if ( isMinor && ! ax . minor ) continue ;
1230
+
1231
+ for ( var i = 0 ; i < baseAxis . _vals . length ; i ++ ) {
1232
+ // get the position of the every tick
1233
+ var pos = baseAxis . l2p ( baseAxis . _vals [ i ] . x ) ;
1234
+ // get the tick for the current axis based on position
1235
+ var vali = ax . p2l ( pos ) ;
1236
+ if ( vali > tickMin && vali < tickMax ) {
1237
+ var obj = axes . tickText ( ax , vali ) ;
1238
+
1239
+ if ( isMinor ) {
1240
+ obj . minor = true ;
1241
+ obj . text = '' ;
1242
+ }
1243
+
1244
+ ticksOut . push ( obj ) ;
1245
+ }
1246
+ }
1247
+ }
1248
+ }
1249
+
1250
+ if ( ax . rangebreaks ) {
1251
+ // remove ticks falling inside rangebreaks
1252
+ ticksOut = ticksOut . filter ( function ( d ) {
1253
+ return ax . maskBreaks ( d . x ) !== BADNUM ;
1254
+ } ) ;
1255
+ }
1256
+ return ticksOut ;
1257
+ }
1258
+
1234
1259
function arrayTicks ( ax ) {
1235
1260
var rng = Lib . simpleMap ( ax . range , ax . r2l ) ;
1236
1261
var exRng = expandRange ( rng ) ;
@@ -3219,7 +3244,7 @@ axes.drawGrid = function(gd, ax, opts) {
3219
3244
3220
3245
var hasMinor = ax . minor && ax . minor . showgrid ;
3221
3246
var minorVals = hasMinor ? opts . vals . filter ( function ( d ) { return d . minor ; } ) : [ ] ;
3222
- var majorVals = ax . showgrid && ax . tickmode !== 'sync' ? opts . vals . filter ( function ( d ) { return ! d . minor ; } ) : [ ] ;
3247
+ var majorVals = ax . showgrid ? opts . vals . filter ( function ( d ) { return ! d . minor ; } ) : [ ] ;
3223
3248
3224
3249
var counterAx = opts . counterAxis ;
3225
3250
if ( counterAx && axes . shouldShowZeroLine ( gd , ax , counterAx ) ) {
0 commit comments