@@ -1560,7 +1560,8 @@ function hoverAvoidOverlaps(hoverLabels, rotateLabels, fullLayout, commonLabel)
15601560 var labelMin = d . crossPos + ( axIsX ? offsetRectY : offsetRectX ) ;
15611561 var labelMax = labelMin + ( axIsX ? d . tx2width * fullLayout . _invScaleX : ( d . by + 2 ) * fullLayout . _invScaleY ) ;
15621562 if ( axIsX ) {
1563- if ( axisLabelMinY !== undefined && axisLabelMaxY !== undefined && Math . max ( labelMin , axisLabelMinY ) <= Math . min ( labelMax , axisLabelMaxY ) ) {
1563+ // at least 1 pixel overlap
1564+ if ( axisLabelMinY !== undefined && axisLabelMaxY !== undefined && Math . min ( labelMax , axisLabelMaxY ) - Math . max ( labelMin , axisLabelMinY ) > 1 ) {
15641565 // has overlap with axis label
15651566 if ( crossAx . side === 'left' ) {
15661567 pmin = crossAx . _mainLinePosition ;
@@ -1570,7 +1571,8 @@ function hoverAvoidOverlaps(hoverLabels, rotateLabels, fullLayout, commonLabel)
15701571 }
15711572 }
15721573 } else {
1573- if ( axisLabelMinX !== undefined && axisLabelMaxX !== undefined && Math . max ( labelMin , axisLabelMinX ) <= Math . min ( labelMax , axisLabelMaxX ) ) {
1574+ // at least 1 pixel overlap
1575+ if ( axisLabelMinX !== undefined && axisLabelMaxX !== undefined && Math . min ( labelMax , axisLabelMaxX ) - Math . max ( labelMin , axisLabelMinX ) > 1 ) {
15741576 // has overlap with axis label
15751577 if ( crossAx . side === 'top' ) {
15761578 pmin = crossAx . _mainLinePosition ;
@@ -1782,25 +1784,27 @@ function alignHoverText(hoverLabels, rotateLabels, scaleX, scaleY) {
17821784 var horzSign = anchor === 'end' ? - 1 : 1 ;
17831785 var shiftX = getLabelShiftX ( d ) ;
17841786 var offsets = getHoverLabelOffsets ( d , rotateLabels ) ;
1787+ var offsetX = offsets . x ;
1788+ var offsetY = offsets . y ;
17851789
17861790 var isMiddle = anchor === 'middle' ;
17871791
17881792 g . select ( 'path' )
17891793 . attr ( 'd' , isMiddle ?
17901794 // middle aligned: rect centered on data
1791- ( 'M-' + pX ( d . bx / 2 + d . tx2width / 2 ) + ',' + pY ( offsets . y - d . by / 2 ) +
1795+ ( 'M-' + pX ( d . bx / 2 + d . tx2width / 2 ) + ',' + pY ( offsetY - d . by / 2 ) +
17921796 'h' + pX ( d . bx ) + 'v' + pY ( d . by ) + 'h-' + pX ( d . bx ) + 'Z' ) :
17931797 // left or right aligned: side rect with arrow to data
1794- ( 'M0,0L' + pX ( horzSign * HOVERARROWSIZE + offsets . x ) + ',' + pY ( HOVERARROWSIZE + offsets . y ) +
1798+ ( 'M0,0L' + pX ( horzSign * HOVERARROWSIZE + offsetX ) + ',' + pY ( HOVERARROWSIZE + offsetY ) +
17951799 'v' + pY ( d . by / 2 - HOVERARROWSIZE ) +
17961800 'h' + pX ( horzSign * d . bx ) +
17971801 'v-' + pY ( d . by ) +
1798- 'H' + pX ( horzSign * HOVERARROWSIZE + offsets . x ) +
1799- 'V' + pY ( offsets . y - HOVERARROWSIZE ) +
1802+ 'H' + pX ( horzSign * HOVERARROWSIZE + offsetX ) +
1803+ 'V' + pY ( offsetY - HOVERARROWSIZE ) +
18001804 'Z' ) ) ;
18011805
1802- var posX = offsets . x + shiftX . xx ;
1803- var posY = offsets . y + d . ty0 - d . by / 2 + HOVERTEXTPAD ;
1806+ var posX = offsetX + shiftX . xx ;
1807+ var posY = offsetY + d . ty0 - d . by / 2 + HOVERTEXTPAD ;
18041808 var textAlign = d . textAlign || 'auto' ;
18051809
18061810 if ( textAlign !== 'auto' ) {
@@ -1822,12 +1826,12 @@ function alignHoverText(hoverLabels, rotateLabels, scaleX, scaleY) {
18221826 if ( d . tx2width ) {
18231827 g . select ( 'text.name' )
18241828 . call ( svgTextUtils . positionText ,
1825- pX ( shiftX . x2x + shiftX . alignShift * HOVERTEXTPAD + offsets . x ) ,
1826- pY ( offsets . y + d . ty0 - d . by / 2 + HOVERTEXTPAD ) ) ;
1829+ pX ( shiftX . x2x + shiftX . alignShift * HOVERTEXTPAD + offsetX ) ,
1830+ pY ( offsetY + d . ty0 - d . by / 2 + HOVERTEXTPAD ) ) ;
18271831 g . select ( 'rect' )
18281832 . call ( Drawing . setRect ,
1829- pX ( shiftX . x2x + ( shiftX . alignShift - 1 ) * d . tx2width / 2 + offsets . x ) ,
1830- pY ( offsets . y - d . by / 2 - 1 ) ,
1833+ pX ( shiftX . x2x + ( shiftX . alignShift - 1 ) * d . tx2width / 2 + offsetX ) ,
1834+ pY ( offsetY - d . by / 2 - 1 ) ,
18311835 pX ( d . tx2width ) , pY ( d . by + 2 ) ) ;
18321836 }
18331837 } ) ;
0 commit comments