@@ -536,7 +536,7 @@ axes.prepTicks = function(ax) {
536
536
if ( ax . tickmode === 'array' ) nt *= 100 ;
537
537
538
538
539
- ax . _roughDTick = ( Math . abs ( rng [ 1 ] - rng [ 0 ] ) - ( ax . _lBreaks || 0 ) ) / nt ;
539
+ ax . _roughDTick = Math . abs ( rng [ 1 ] - rng [ 0 ] ) / nt ;
540
540
axes . autoTicks ( ax , ax . _roughDTick ) ;
541
541
542
542
// check for a forced minimum dtick
@@ -731,6 +731,25 @@ function arrayTicks(ax) {
731
731
return ticksOut ;
732
732
}
733
733
734
+ function roundBaseDay ( dayHours ) {
735
+ switch ( dayHours ) {
736
+ case 4 : return [ 1 , 2 ] ;
737
+ case 6 : return [ 1 , 2 , 3 ] ;
738
+ case 8 : return [ 1 , 2 , 4 ] ;
739
+ case 9 : return [ 1 , 3 ] ;
740
+ case 10 : return [ 1 , 2 , 5 ] ;
741
+ case 12 : return [ 1 , 2 , 3 , 4 , 6 ] ;
742
+ case 14 : return [ 1 , 2 , 7 ] ;
743
+ case 15 : return [ 1 , 3 , 5 ] ;
744
+ case 16 : return [ 1 , 2 , 4 , 8 ] ;
745
+ case 18 : return [ 1 , 2 , 3 , 6 , 9 ] ;
746
+ case 20 : return [ 1 , 2 , 4 , 5 , 10 ] ;
747
+ case 21 : return [ 1 , 3 , 7 ] ;
748
+ case 22 : return [ 1 , 2 , 11 ] ;
749
+ }
750
+ return [ 1 ] ;
751
+ }
752
+
734
753
var roundBase10 = [ 2 , 5 , 10 ] ;
735
754
var roundBase24 = [ 1 , 2 , 3 , 6 , 12 ] ;
736
755
var roundBase60 = [ 1 , 2 , 5 , 10 , 15 , 30 ] ;
@@ -776,22 +795,34 @@ axes.autoTicks = function(ax, roughDTick) {
776
795
// being > half of the final unit - so precalculate twice the rough val
777
796
var roughX2 = 2 * roughDTick ;
778
797
798
+ var oneDay = ONEDAY ;
799
+ var dayRatio = 1 ;
800
+ if ( ax . _hasHourBreaks ) {
801
+ oneDay = ax . _dayHours * ONEHOUR ;
802
+ dayRatio = Math . round ( ax . _dayHours / 24 * 7 ) / 7 ; // we use this in week context
803
+ }
804
+
779
805
if ( roughX2 > ONEAVGYEAR ) {
780
806
roughDTick /= ONEAVGYEAR ;
781
807
base = getBase ( 10 ) ;
782
808
ax . dtick = 'M' + ( 12 * roundDTick ( roughDTick , base , roundBase10 ) ) ;
783
809
} else if ( roughX2 > ONEAVGMONTH ) {
784
810
roughDTick /= ONEAVGMONTH ;
785
811
ax . dtick = 'M' + roundDTick ( roughDTick , 1 , roundBase24 ) ;
786
- } else if ( roughX2 > ONEDAY ) {
787
- ax . dtick = roundDTick ( roughDTick , ONEDAY , ax . _hasDayOfWeekBreaks ? [ 1 , 7 , 14 ] : roundDays ) ;
788
-
812
+ } else if ( roughX2 > oneDay ) {
813
+ ax . dtick = roundDTick ( roughDTick , oneDay , ax . _hasDayOfWeekBreaks ?
814
+ [ 1 , 2 * dayRatio , 7 * dayRatio , 14 * dayRatio ] :
815
+ roundDays
816
+ ) ;
789
817
// get week ticks on sunday
790
818
// this will also move the base tick off 2000-01-01 if dtick is
791
819
// 2 or 3 days... but that's a weird enough case that we'll ignore it.
792
820
ax . tick0 = Lib . dateTick0 ( ax . calendar , true ) ;
793
821
} else if ( roughX2 > ONEHOUR ) {
794
- ax . dtick = roundDTick ( roughDTick , ONEHOUR , roundBase24 ) ;
822
+ ax . dtick = roundDTick ( roughDTick , ONEHOUR , ax . _hasHourBreaks ?
823
+ roundBaseDay ( ax . _dayHours ) :
824
+ roundBase24
825
+ ) ;
795
826
} else if ( roughX2 > ONEMIN ) {
796
827
ax . dtick = roundDTick ( roughDTick , ONEMIN , roundBase60 ) ;
797
828
} else if ( roughX2 > ONESEC ) {
0 commit comments