@@ -192,30 +192,33 @@ function getMainAxisInfo(axesInfo) {
192192
193193function correctMinMaxValues ( axesInfo ) {
194194 const mainAxisInfo = getMainAxisInfo ( axesInfo ) ;
195- const mainAxisInfoTickInterval = mainAxisInfo . tickInterval ;
195+ const mainAxisRange = getAxisRange ( mainAxisInfo ) ;
196196
197197 axesInfo . forEach ( axisInfo => {
198- let scale ;
199- let move ;
200- let mainAxisBaseValueOffset ;
201- let valueFromAxisInfo ;
202-
203198 if ( axisInfo !== mainAxisInfo ) {
204- if ( mainAxisInfoTickInterval && axisInfo . tickInterval ) {
199+ if ( mainAxisInfo . tickInterval && axisInfo . tickInterval ) {
200+ const tickIntervalScale = axisInfo . tickInterval / mainAxisInfo . tickInterval ;
201+
205202 if ( axisInfo . stubData && isDefined ( axisInfo . synchronizedValue ) ) {
206- axisInfo . oldMinValue = axisInfo . minValue = axisInfo . baseTickValue - ( mainAxisInfo . baseTickValue - mainAxisInfo . minValue ) / mainAxisInfoTickInterval * axisInfo . tickInterval ;
207- axisInfo . oldMaxValue = axisInfo . maxValue = axisInfo . baseTickValue - ( mainAxisInfo . baseTickValue - mainAxisInfo . maxValue ) / mainAxisInfoTickInterval * axisInfo . tickInterval ;
203+ axisInfo . oldMinValue = axisInfo . minValue = axisInfo . baseTickValue - ( mainAxisInfo . baseTickValue - mainAxisInfo . minValue ) * tickIntervalScale ;
204+ axisInfo . oldMaxValue = axisInfo . maxValue = axisInfo . baseTickValue - ( mainAxisInfo . baseTickValue - mainAxisInfo . maxValue ) * tickIntervalScale ;
208205 }
209- scale = mainAxisInfoTickInterval / getAxisRange ( mainAxisInfo ) / axisInfo . tickInterval * getAxisRange ( axisInfo ) ;
210- axisInfo . maxValue = axisInfo . minValue + getAxisRange ( axisInfo ) / scale ;
206+
207+ axisInfo . maxValue = axisInfo . minValue + tickIntervalScale * mainAxisRange ;
211208 }
212- if ( ( mainAxisInfo . inverted && ! axisInfo . inverted ) || ( ! mainAxisInfo . inverted && axisInfo . inverted ) ) {
209+
210+ let mainAxisBaseValueOffset ;
211+
212+ if ( ! ! mainAxisInfo . inverted !== ! ! axisInfo . inverted ) {
213213 mainAxisBaseValueOffset = mainAxisInfo . maxValue - mainAxisInfo . invertedBaseTickValue ;
214214 } else {
215215 mainAxisBaseValueOffset = mainAxisInfo . baseTickValue - mainAxisInfo . minValue ;
216216 }
217- valueFromAxisInfo = getAxisRange ( axisInfo ) ;
218- move = ( mainAxisBaseValueOffset / getAxisRange ( mainAxisInfo ) - ( axisInfo . baseTickValue - axisInfo . minValue ) / valueFromAxisInfo ) * valueFromAxisInfo ;
217+
218+ const axisBaseValueOffset = axisInfo . baseTickValue - axisInfo . minValue ;
219+ const scaledMainAxisBaseValueOffset = mainAxisBaseValueOffset * getAxisRange ( axisInfo ) / mainAxisRange ;
220+ const move = scaledMainAxisBaseValueOffset - axisBaseValueOffset ;
221+
219222 axisInfo . minValue -= move ;
220223 axisInfo . maxValue -= move ;
221224 }
@@ -365,18 +368,8 @@ function updateMinorTicks(axesInfo) {
365368}
366369
367370function allAxesValuesOnSameSideFromZero ( axesInfo ) {
368- let allPositive = true ;
369- let allNegative = true ;
370-
371- axesInfo . forEach ( ( axis ) => {
372- if ( axis . oldMinValue > 0 || axis . oldMaxValue > 0 ) {
373- allNegative = false ;
374- }
375-
376- if ( axis . oldMinValue < 0 || axis . oldMaxValue < 0 ) {
377- allPositive = false ;
378- }
379- } ) ;
371+ const allPositive = axesInfo . every ( ( { oldMinValue, oldMaxValue } ) => oldMinValue >= 0 && oldMaxValue >= 0 ) ;
372+ const allNegative = axesInfo . every ( ( { oldMinValue, oldMaxValue } ) => oldMinValue <= 0 && oldMaxValue <= 0 ) ;
380373
381374 return allPositive || allNegative ;
382375}
@@ -387,8 +380,9 @@ function correctPaddings(axesInfo, paddings) {
387380 }
388381
389382 return axesInfo . reduce ( ( prev , info ) => {
390- const inverted = info . inverted ;
391- const { start, end } = info . axis . getCorrectedValuesToZero ( info . minValue , info . maxValue ) ;
383+ const { inverted, minValue, maxValue } = info ;
384+ const { start, end } = info . axis . getCorrectedValuesToZero ( minValue , maxValue ) ;
385+
392386 if ( isDefined ( start ) || isDefined ( end ) ) {
393387 return inverted ? {
394388 start : prev . start ,
@@ -398,38 +392,44 @@ function correctPaddings(axesInfo, paddings) {
398392 end : prev . end
399393 } ;
400394 }
395+
401396 return prev ;
402397 } , paddings ) ;
403398}
404399
405400const multiAxesSynchronizer = {
406401 synchronize : function ( valueAxes ) {
407402 each ( getValueAxesPerPanes ( valueAxes ) , function ( _ , axes ) {
408- let axesInfo ;
409- let paddings ;
410- if ( axes . length > 1 ) {
411- axesInfo = populateAxesInfo ( axes ) ;
412- if ( axesInfo . length < 2 || ! getMainAxisInfo ( axesInfo ) ) return ;
413- updateTickValues ( axesInfo ) ;
403+ if ( axes . length <= 1 ) {
404+ return ;
405+ }
414406
415- correctMinMaxValues ( axesInfo ) ;
407+ const axesInfo = populateAxesInfo ( axes ) ;
416408
417- paddings = calculatePaddings ( axesInfo ) ;
418- paddings = correctPaddings ( axesInfo , paddings ) ;
409+ if ( axesInfo . length < 2 || ! getMainAxisInfo ( axesInfo ) ) {
410+ return ;
411+ }
419412
420- correctMinMaxValuesByPaddings ( axesInfo , paddings ) ;
413+ updateTickValues ( axesInfo ) ;
421414
422- correctAfterSynchronize ( axesInfo ) ;
415+ correctMinMaxValues ( axesInfo ) ;
423416
424- updateTickValuesIfSynchronizedValueUsed ( axesInfo ) ;
417+ let paddings = calculatePaddings ( axesInfo ) ;
418+ paddings = correctPaddings ( axesInfo , paddings ) ;
425419
426- updateMinorTicks ( axesInfo ) ;
420+ correctMinMaxValuesByPaddings ( axesInfo , paddings ) ;
427421
428- axesInfo . forEach ( info => {
429- convertAxisInfo ( info , logConverter ( info . axis . getTranslator ( ) . getBusinessRange ( ) ) ) ;
430- } ) ;
431- applyMinMaxValues ( axesInfo ) ;
432- }
422+ correctAfterSynchronize ( axesInfo ) ;
423+
424+ updateTickValuesIfSynchronizedValueUsed ( axesInfo ) ;
425+
426+ updateMinorTicks ( axesInfo ) ;
427+
428+ axesInfo . forEach ( info => {
429+ convertAxisInfo ( info , logConverter ( info . axis . getTranslator ( ) . getBusinessRange ( ) ) ) ;
430+ } ) ;
431+
432+ applyMinMaxValues ( axesInfo ) ;
433433 } ) ;
434434 }
435435} ;
0 commit comments