@@ -781,42 +781,49 @@ axes.calcTicks = function calcTicks(ax, opts) {
781781
782782 var A = tickVals [ a ] . value ;
783783 var B = tickVals [ b ] . value ;
784-
785784 var actualDelta = Math . abs ( B - A ) ;
786785 var delta = definedDelta || actualDelta ;
786+ var periodLength = 0 ;
787+
787788 if ( delta >= ONEMINYEAR ) {
788789 if ( actualDelta >= ONEMINYEAR && actualDelta <= ONEMAXYEAR ) {
789- v + = actualDelta / 2 ;
790+ periodLength = actualDelta ;
790791 } else {
791- v + = ONEAVGYEAR / 2 ;
792+ periodLength = ONEAVGYEAR ;
792793 }
793794 } else if ( delta >= ONEMINQUARTER ) {
794795 if (
795796 definedDelta && // case of specified by tickfomat
796797 actualDelta >= ONEMINQUARTER && actualDelta <= ONEMAXQUARTER
797798 ) {
798- v + = actualDelta / 2 ;
799+ periodLength = actualDelta ;
799800 } else {
800- v + = ONEAVGQUARTER / 2 ;
801+ periodLength = ONEAVGQUARTER ;
801802 }
802803 } else if ( delta >= ONEMINMONTH ) {
803804 if ( actualDelta >= ONEMINMONTH && actualDelta <= ONEMAXMONTH ) {
804- v + = actualDelta / 2 ;
805+ periodLength = actualDelta ;
805806 } else {
806- v + = ONEAVGMONTH / 2 ;
807+ periodLength = ONEAVGMONTH ;
807808 }
808809 } else if ( delta >= ONEWEEK ) {
809- v += ONEWEEK / 2 ;
810- if (
811- definedDelta && // case of specified by tickfomat
812- actualDelta === ONEWEEK && ax . _hasDayOfWeekBreaks
813- ) {
814- v -= ONEDAY ; // half of two days which is a good approximation for the number of week-end days
815- }
810+ periodLength = ONEWEEK ;
816811 } else if ( delta >= ONEDAY ) {
817- v + = ONEDAY / 2 ;
812+ periodLength = ONEDAY ;
818813 }
819814
815+ if ( ax . rangebreaks ) {
816+ var nOut = 0 ;
817+ var nAll = 2 * 3 * 5 * 7 ; // number of samples
818+ for ( var c = 0 ; c < nAll ; c ++ ) {
819+ var r = c / nAll ;
820+ if ( ax . maskBreaks ( A * ( 1 - r ) + B * r ) === BADNUM ) nOut ++ ;
821+ }
822+ periodLength *= 1 - nOut / nAll ;
823+ }
824+
825+ v += periodLength / 2 ;
826+
820827 ticksOut [ i ] . periodX = v ;
821828
822829 if ( v > maxRange || v < minRange ) { // hide label if outside the range
0 commit comments