@@ -920,7 +920,12 @@ axes.calcTicks = function calcTicks(ax, opts) {
920
920
var minorTicks = [ ] ;
921
921
922
922
var tickVals = [ ] ;
923
+ var tickFractionalVals = [ ] ;
924
+ tickFractionalVals . _isSet = false
925
+
923
926
var minorTickVals = [ ] ;
927
+ var minorTickFractionalVals = [ ] ;
928
+ minorTickFractionalVals . _isSet = false
924
929
925
930
var hasMinor = ax . minor && ( ax . minor . ticks || ax . minor . showgrid ) ;
926
931
@@ -950,18 +955,29 @@ axes.calcTicks = function calcTicks(ax, opts) {
950
955
// in case we're missing some ticktext, we can break out for array ticks
951
956
if ( mockAx . tickmode === 'array' || mockAx . tickmode === 'proportional' ) {
952
957
// Mapping proportions to array:
953
- var valsProp , fractionalVals ;
954
- var width = maxRange - minRange ;
955
- var offset = ! axrev ? minRange : maxRange ;
956
- if ( axrev ) width *= - 1 ;
957
958
if ( mockAx . tickmode === 'proportional' ) {
958
- valsProp = major ? Lib . nestedProperty ( ax , 'tickvals' ) : Lib . nestedProperty ( ax . minor , 'tickvals' ) ;
959
- fractionalVals = valsProp . get ( ) ;
960
- var mappedVals = Lib . simpleMap ( fractionalVals , function ( fraction , offset , width , type ) {
961
- var mapped = offset + ( width * fraction ) ;
962
- return ( type === 'log' ) ? Math . pow ( 10 , mapped ) : mapped ;
963
- } , offset , width , type ) ;
964
- valsProp . set ( mappedVals ) ;
959
+ var width = ( maxRange - minRange ) ;
960
+ if ( axrev ) width *= - 1 ;
961
+ var offset = ! axrev ? minRange : maxRange ;
962
+
963
+ var currentFractionalVals = [ ] ;
964
+ var currentValsProp ;
965
+ if ( major ) {
966
+ currentValsProp = Lib . nestedProperty ( ax , 'tickvals' ) ; // Do we need this?
967
+ currentFractionalVals = tickFractionalVals = currentValsProp . get ( ) ;
968
+ tickFractionalVals . _isSet = true
969
+ } else {
970
+ currentValsProp = Lib . nestedProperty ( ax . minor , 'tickvals' ) ;
971
+ currentFractionalVals = minorTickFractionalVals = currentValsProp . get ( ) ;
972
+ minorTickFractionalVals . _isSet = true
973
+ }
974
+
975
+ var mappedVals = Lib . simpleMap ( currentFractionalVals ,
976
+ function ( fraction , offset , width , type ) {
977
+ var mapped = offset + ( width * fraction ) ;
978
+ return ( type === 'log' ) ? Math . pow ( 10 , mapped ) : mapped ;
979
+ } , offset , width , type ) ;
980
+ currentValsProp . set ( mappedVals ) ;
965
981
}
966
982
967
983
// Original 'array' only code
@@ -972,11 +988,8 @@ axes.calcTicks = function calcTicks(ax, opts) {
972
988
minorTickVals = [ ] ;
973
989
minorTicks = arrayTicks ( ax ) ;
974
990
}
975
-
976
- // Reset tickvals back to proportional
977
- if ( mockAx . tickmode === 'proportional' ) valsProp . set ( fractionalVals ) ;
978
991
continue ;
979
- }
992
+ }
980
993
981
994
// fill tickVals based on overlaying axis
982
995
if ( mockAx . tickmode === 'sync' ) {
@@ -1225,6 +1238,7 @@ axes.calcTicks = function calcTicks(ax, opts) {
1225
1238
ticksOut . push ( t ) ;
1226
1239
}
1227
1240
}
1241
+
1228
1242
ticksOut = ticksOut . concat ( minorTicks ) ;
1229
1243
1230
1244
ax . _inCalcTicks = false ;
@@ -1234,6 +1248,14 @@ axes.calcTicks = function calcTicks(ax, opts) {
1234
1248
ticksOut [ 0 ] . noTick = true ;
1235
1249
}
1236
1250
1251
+ // Reset tickvals back to proportional
1252
+ if ( tickFractionalVals . _isSet ) {
1253
+ Lib . nestedProperty ( ax , 'tickvals' ) . set ( tickFractionalVals )
1254
+ }
1255
+ if ( minorTickFractionalVals . _isSet ) {
1256
+ Lib . nestedProperty ( ax . minor , 'tickvals' ) . set ( minorTickFractionalVals ) ;
1257
+ }
1258
+
1237
1259
return ticksOut ;
1238
1260
} ;
1239
1261
0 commit comments