@@ -1531,17 +1531,17 @@ def _get_xy(self, renderer, x, y, s):
15311531 if s2 == 'data' :
15321532 y = float (self .convert_yunits (y ))
15331533
1534- tr = self ._get_xy_transform (renderer , s )
1534+ tr = self ._get_xy_transform (renderer , ( x , y ), s )
15351535 x1 , y1 = tr .transform_point ((x , y ))
15361536 return x1 , y1
15371537
1538- def _get_xy_transform (self , renderer , s ):
1538+ def _get_xy_transform (self , renderer , xy , s ):
15391539
15401540 if isinstance (s , tuple ):
15411541 s1 , s2 = s
15421542 from matplotlib .transforms import blended_transform_factory
1543- tr1 = self ._get_xy_transform (renderer , s1 )
1544- tr2 = self ._get_xy_transform (renderer , s2 )
1543+ tr1 = self ._get_xy_transform (renderer , xy , s1 )
1544+ tr2 = self ._get_xy_transform (renderer , xy , s2 )
15451545 tr = blended_transform_factory (tr1 , tr2 )
15461546 return tr
15471547
@@ -1590,7 +1590,17 @@ def _get_xy_transform(self, renderer, s):
15901590 # bbox0 = self._get_bbox(renderer, bbox)
15911591
15921592 if bbox0 is not None :
1593- xy0 = bbox0 .bounds [:2 ]
1593+ x , y = xy
1594+ bounds = bbox0 .extents
1595+ if x < 0 :
1596+ x0 = bounds [2 ]
1597+ else :
1598+ x0 = bounds [0 ]
1599+ if y < 0 :
1600+ y0 = bounds [3 ]
1601+ else :
1602+ y0 = bounds [1 ]
1603+ xy0 = (x0 , y0 )
15941604 elif bbox_name == "offset" :
15951605 xy0 = self ._get_ref_xy (renderer )
15961606
@@ -1950,7 +1960,8 @@ def _update_position_xytext(self, renderer, xy_pixel):
19501960 patch.
19511961 """
19521962 # generate transformation,
1953- self .set_transform (self ._get_xy_transform (renderer , self .anncoords ))
1963+ self .set_transform (self ._get_xy_transform (
1964+ renderer , self .xy , self .anncoords ))
19541965
19551966 ox0 , oy0 = self ._get_xy_display ()
19561967 ox1 , oy1 = xy_pixel
0 commit comments