@@ -781,42 +781,49 @@ axes.calcTicks = function calcTicks(ax, opts) {
781
781
782
782
var A = tickVals [ a ] . value ;
783
783
var B = tickVals [ b ] . value ;
784
-
785
784
var actualDelta = Math . abs ( B - A ) ;
786
785
var delta = definedDelta || actualDelta ;
786
+ var periodLength = 0 ;
787
+
787
788
if ( delta >= ONEMINYEAR ) {
788
789
if ( actualDelta >= ONEMINYEAR && actualDelta <= ONEMAXYEAR ) {
789
- v + = actualDelta / 2 ;
790
+ periodLength = actualDelta ;
790
791
} else {
791
- v + = ONEAVGYEAR / 2 ;
792
+ periodLength = ONEAVGYEAR ;
792
793
}
793
794
} else if ( delta >= ONEMINQUARTER ) {
794
795
if (
795
796
definedDelta && // case of specified by tickfomat
796
797
actualDelta >= ONEMINQUARTER && actualDelta <= ONEMAXQUARTER
797
798
) {
798
- v + = actualDelta / 2 ;
799
+ periodLength = actualDelta ;
799
800
} else {
800
- v + = ONEAVGQUARTER / 2 ;
801
+ periodLength = ONEAVGQUARTER ;
801
802
}
802
803
} else if ( delta >= ONEMINMONTH ) {
803
804
if ( actualDelta >= ONEMINMONTH && actualDelta <= ONEMAXMONTH ) {
804
- v + = actualDelta / 2 ;
805
+ periodLength = actualDelta ;
805
806
} else {
806
- v + = ONEAVGMONTH / 2 ;
807
+ periodLength = ONEAVGMONTH ;
807
808
}
808
809
} 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 ;
816
811
} else if ( delta >= ONEDAY ) {
817
- v + = ONEDAY / 2 ;
812
+ periodLength = ONEDAY ;
818
813
}
819
814
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
+
820
827
ticksOut [ i ] . periodX = v ;
821
828
822
829
if ( v > maxRange || v < minRange ) { // hide label if outside the range
0 commit comments