@@ -1228,6 +1228,19 @@ function roundDTick(roughDTick, base, roundingSet) {
12281228// D1 shows all digits, D2 shows 2 and 5
12291229axes . autoTicks = function ( ax , roughDTick , isMinor ) {
12301230 var majorDtick = ax . _majorDtick ;
1231+ var hasMinorNtick = isMinor && ax . nticks ;
1232+
1233+ var mayRound = function ( roughDTick , base , roundingSet ) {
1234+ return hasMinorNtick ?
1235+ roughDTick :
1236+ roundDTick ( roughDTick , base , roundingSet ) ;
1237+ } ;
1238+
1239+ var mayCeil = function ( roughDTick ) {
1240+ return hasMinorNtick ?
1241+ roughDTick :
1242+ Math . ceil ( roughDTick ) ;
1243+ } ;
12311244
12321245 var base ;
12331246
@@ -1247,12 +1260,12 @@ axes.autoTicks = function(ax, roughDTick, isMinor) {
12471260 if ( roughX2 > ONEAVGYEAR ) {
12481261 roughDTick /= ONEAVGYEAR ;
12491262 base = getBase ( 10 ) ;
1250- ax . dtick = 'M' + ( 12 * roundDTick ( roughDTick , base , roundBase10 ) ) ;
1263+ ax . dtick = 'M' + ( 12 * mayRound ( roughDTick , base , roundBase10 ) ) ;
12511264 } else if ( roughX2 > ONEAVGMONTH ) {
12521265 roughDTick /= ONEAVGMONTH ;
1253- ax . dtick = 'M' + roundDTick ( roughDTick , 1 , roundBase24 ) ;
1266+ ax . dtick = 'M' + mayRound ( roughDTick , 1 , roundBase24 ) ;
12541267 } else if ( roughX2 > ONEDAY ) {
1255- ax . dtick = roundDTick ( roughDTick , ONEDAY , _roundDays ) ;
1268+ ax . dtick = mayRound ( roughDTick , ONEDAY , _roundDays ) ;
12561269 if ( ! isMinor ) {
12571270 // get week ticks on sunday
12581271 // this will also move the base tick off 2000-01-01 if dtick is
@@ -1270,18 +1283,18 @@ axes.autoTicks = function(ax, roughDTick, isMinor) {
12701283 if ( isPeriod ) ax . _dowTick0 = ax . tick0 ;
12711284 }
12721285 } else if ( roughX2 > ONEHOUR ) {
1273- ax . dtick = roundDTick ( roughDTick , ONEHOUR , roundBase24 ) ;
1286+ ax . dtick = mayRound ( roughDTick , ONEHOUR , roundBase24 ) ;
12741287 } else if ( roughX2 > ONEMIN ) {
1275- ax . dtick = roundDTick ( roughDTick , ONEMIN , roundBase60 ) ;
1288+ ax . dtick = mayRound ( roughDTick , ONEMIN , roundBase60 ) ;
12761289 } else if ( roughX2 > ONESEC ) {
1277- ax . dtick = roundDTick ( roughDTick , ONESEC , roundBase60 ) ;
1290+ ax . dtick = mayRound ( roughDTick , ONESEC , roundBase60 ) ;
12781291 } else {
12791292 // milliseconds
12801293 base = getBase ( 10 ) ;
1281- ax . dtick = roundDTick ( roughDTick , base , roundBase10 ) ;
1294+ ax . dtick = mayRound ( roughDTick , base , roundBase10 ) ;
12821295 }
12831296
1284- if ( isMinor ) {
1297+ if ( isMinor && ! hasMinorNtick ) {
12851298 if (
12861299 typeof majorDtick === 'string' &&
12871300 majorDtick . charAt ( 0 ) === 'M'
@@ -1302,9 +1315,9 @@ axes.autoTicks = function(ax, roughDTick, isMinor) {
13021315 if ( majorDtick > ONEDAY ) {
13031316 if ( majorDtick === 14 * ONEDAY ) ax . dtick = 7 * ONEDAY ;
13041317 else {
1305- var v = roundDTick ( majorDtick , ONEDAY , _roundDays ) ;
1318+ var v = mayRound ( majorDtick , ONEDAY , _roundDays ) ;
13061319 if ( v >= majorDtick ) {
1307- v = roundDTick ( majorDtick / 7 , ONEDAY , _roundDays ) ;
1320+ v = mayRound ( majorDtick / 7 , ONEDAY , _roundDays ) ;
13081321 }
13091322
13101323 if ( ( majorDtick / ONEDAY ) % ( v / ONEDAY ) ) {
@@ -1320,7 +1333,7 @@ axes.autoTicks = function(ax, roughDTick, isMinor) {
13201333
13211334 if ( roughDTick > 0.7 ) {
13221335 // only show powers of 10
1323- ax . dtick = isMinor ? 1 : Math . ceil ( roughDTick ) ;
1336+ ax . dtick = mayCeil ( roughDTick ) ;
13241337 } else if ( Math . abs ( rng [ 1 ] - rng [ 0 ] ) < 1 ) {
13251338 // span is less than one power of 10
13261339 var nt = 1.5 * Math . abs ( ( rng [ 1 ] - rng [ 0 ] ) / roughDTick ) ;
@@ -1329,7 +1342,7 @@ axes.autoTicks = function(ax, roughDTick, isMinor) {
13291342 roughDTick = Math . abs ( Math . pow ( 10 , rng [ 1 ] ) -
13301343 Math . pow ( 10 , rng [ 0 ] ) ) / nt ;
13311344 base = getBase ( 10 ) ;
1332- ax . dtick = 'L' + roundDTick ( roughDTick , base , roundBase10 ) ;
1345+ ax . dtick = 'L' + mayRound ( roughDTick , base , roundBase10 ) ;
13331346 } else {
13341347 // include intermediates between powers of 10,
13351348 // labeled with small digits
@@ -1338,21 +1351,16 @@ axes.autoTicks = function(ax, roughDTick, isMinor) {
13381351 }
13391352 } else if ( ax . type === 'category' || ax . type === 'multicategory' ) {
13401353 ax . tick0 = 0 ;
1341- ax . dtick = Math . ceil ( Math . max ( roughDTick , 1 ) ) ;
1354+ ax . dtick = mayCeil ( Math . max ( roughDTick , 1 ) ) ;
13421355 } else if ( isAngular ( ax ) ) {
13431356 ax . tick0 = 0 ;
13441357 base = 1 ;
1345- ax . dtick = roundDTick ( roughDTick , base , roundAngles ) ;
1358+ ax . dtick = mayRound ( roughDTick , base , roundAngles ) ;
13461359 } else {
13471360 // auto ticks always start at 0
13481361 ax . tick0 = 0 ;
1349- if ( isMinor && ax . nticks ) {
1350- // do not round when minor has nticks in this case
1351- ax . dtick = roughDTick ;
1352- } else {
1353- base = getBase ( 10 ) ;
1354- ax . dtick = roundDTick ( roughDTick , base , roundBase10 ) ;
1355- }
1362+ base = getBase ( 10 ) ;
1363+ ax . dtick = mayRound ( roughDTick , base , roundBase10 ) ;
13561364 }
13571365
13581366 // prevent infinite loops
0 commit comments