@@ -592,7 +592,6 @@ axes.calcTicks = function calcTicks(ax, opts) {
592
592
}
593
593
594
594
var isDLog = ( ax . type === 'log' ) && ! ( isNumeric ( ax . dtick ) || ax . dtick . charAt ( 0 ) === 'L' ) ;
595
-
596
595
var tickVals ;
597
596
function generateTicks ( ) {
598
597
var xPrevious = null ;
@@ -620,6 +619,16 @@ axes.calcTicks = function calcTicks(ax, opts) {
620
619
621
620
generateTicks ( ) ;
622
621
622
+ var isPeriod = ax . ticklabelmode === 'period' ;
623
+ var addOneTickToStart = isPeriod && tickVals . length > 2 ;
624
+
625
+ if ( addOneTickToStart ) {
626
+ tickVals . push ( {
627
+ minor : false ,
628
+ value : 2 * tickVals [ 0 ] . value - tickVals [ 1 ] . value
629
+ } ) ;
630
+ }
631
+
623
632
if ( ax . rangebreaks ) {
624
633
// replace ticks inside breaks that would get a tick
625
634
// and reduce ticks
@@ -684,7 +693,6 @@ axes.calcTicks = function calcTicks(ax, opts) {
684
693
var minRange = Math . min ( rng [ 0 ] , rng [ 1 ] ) ;
685
694
var maxRange = Math . max ( rng [ 0 ] , rng [ 1 ] ) ;
686
695
687
- var isPeriod = ax . ticklabelmode === 'period' ;
688
696
var definedDelta ;
689
697
if ( isPeriod && ax . tickformat ) {
690
698
var _has = function ( str ) {
@@ -722,14 +730,23 @@ axes.calcTicks = function calcTicks(ax, opts) {
722
730
if ( isPeriod ) {
723
731
var v = tickVals [ i ] . value ;
724
732
725
- var a , b ;
726
- if ( i === tickVals . length - 1 ) {
727
- a = i - 1 ;
728
- b = i ;
733
+ var a = i ;
734
+ var b = i + 1 ;
735
+ if ( addOneTickToStart ) {
736
+ if ( i === tickVals . length - 1 ) {
737
+ a = i ;
738
+ b = 0 ;
739
+ } else if ( i === tickVals . length - 2 ) {
740
+ a = i - 1 ;
741
+ b = i ;
742
+ }
729
743
} else {
730
- a = i ;
731
- b = i + 1 ;
744
+ if ( i === tickVals . length - 1 ) {
745
+ a = i - 1 ;
746
+ b = i ;
747
+ }
732
748
}
749
+
733
750
var A = tickVals [ a ] . value ;
734
751
var B = tickVals [ b ] . value ;
735
752
0 commit comments