@@ -592,6 +592,7 @@ axes.calcTicks = function calcTicks(ax, opts) {
592592 }
593593
594594 var isDLog = ( ax . type === 'log' ) && ! ( isNumeric ( ax . dtick ) || ax . dtick . charAt ( 0 ) === 'L' ) ;
595+
595596 var tickVals ;
596597 function generateTicks ( ) {
597598 var xPrevious = null ;
@@ -620,13 +621,12 @@ axes.calcTicks = function calcTicks(ax, opts) {
620621 generateTicks ( ) ;
621622
622623 var isPeriod = ax . ticklabelmode === 'period' ;
623- var addOneTickToStart = isPeriod && tickVals . length > 2 ;
624-
625- if ( addOneTickToStart ) {
626- tickVals . push ( {
624+ if ( isPeriod ) {
625+ // add one label to show pre tick0 period
626+ tickVals = [ {
627627 minor : false ,
628628 value : axes . tickIncrement ( tickVals [ 0 ] . value , ax . dtick , ! axrev , ax . caldendar )
629- } ) ;
629+ } ] . concat ( tickVals ) ;
630630 }
631631
632632 if ( ax . rangebreaks ) {
@@ -715,6 +715,7 @@ axes.calcTicks = function calcTicks(ax, opts) {
715715 }
716716 }
717717
718+ var removedPreTick0Label = false ;
718719 var ticksOut = new Array ( tickVals . length ) ;
719720 for ( var i = 0 ; i < tickVals . length ; i ++ ) {
720721 var _minor = tickVals [ i ] . minor ;
@@ -732,19 +733,12 @@ axes.calcTicks = function calcTicks(ax, opts) {
732733
733734 var a = i ;
734735 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- }
736+ if ( i < tickVals . length - 1 ) {
737+ a = i ;
738+ b = i + 1 ;
743739 } else {
744- if ( i === tickVals . length - 1 ) {
745- a = i - 1 ;
746- b = i ;
747- }
740+ a = i - 1 ;
741+ b = i ;
748742 }
749743
750744 var A = tickVals [ a ] . value ;
@@ -763,10 +757,17 @@ axes.calcTicks = function calcTicks(ax, opts) {
763757
764758 if ( v > maxRange || v < minRange ) { // hide label if outside the range
765759 ticksOut [ i ] . text = '' ;
760+ if ( i === 0 ) removedPreTick0Label = true ;
766761 }
767762 }
768763 }
769764
765+ if ( removedPreTick0Label && ticksOut . length > 1 ) {
766+ // redo tick0 text
767+ ax . _prevDateHead = '' ;
768+ ticksOut [ 1 ] . text = axes . tickText ( ax , tickVals [ 1 ] . value ) . text ;
769+ }
770+
770771 ax . _inCalcTicks = false ;
771772
772773 return ticksOut ;
0 commit comments