@@ -1498,17 +1498,17 @@ def _get_xy(self, renderer, x, y, s):
14981498 if s2 == 'data' :
14991499 y = float (self .convert_yunits (y ))
15001500
1501- tr = self ._get_xy_transform (renderer , s )
1501+ tr = self ._get_xy_transform (renderer , ( x , y ), s )
15021502 x1 , y1 = tr .transform_point ((x , y ))
15031503 return x1 , y1
15041504
1505- def _get_xy_transform (self , renderer , s ):
1505+ def _get_xy_transform (self , renderer , xy , s ):
15061506
15071507 if isinstance (s , tuple ):
15081508 s1 , s2 = s
15091509 from matplotlib .transforms import blended_transform_factory
1510- tr1 = self ._get_xy_transform (renderer , s1 )
1511- tr2 = self ._get_xy_transform (renderer , s2 )
1510+ tr1 = self ._get_xy_transform (renderer , xy , s1 )
1511+ tr2 = self ._get_xy_transform (renderer , xy , s2 )
15121512 tr = blended_transform_factory (tr1 , tr2 )
15131513 return tr
15141514
@@ -1557,7 +1557,17 @@ def _get_xy_transform(self, renderer, s):
15571557 # bbox0 = self._get_bbox(renderer, bbox)
15581558
15591559 if bbox0 is not None :
1560- xy0 = bbox0 .bounds [:2 ]
1560+ x , y = xy
1561+ bounds = bbox0 .extents
1562+ if x < 0 :
1563+ x0 = bounds [2 ]
1564+ else :
1565+ x0 = bounds [0 ]
1566+ if y < 0 :
1567+ y0 = bounds [3 ]
1568+ else :
1569+ y0 = bounds [1 ]
1570+ xy0 = (x0 , y0 )
15611571 elif bbox_name == "offset" :
15621572 xy0 = self ._get_ref_xy (renderer )
15631573
@@ -1917,7 +1927,8 @@ def _update_position_xytext(self, renderer, xy_pixel):
19171927 patch.
19181928 """
19191929 # generate transformation,
1920- self .set_transform (self ._get_xy_transform (renderer , self .anncoords ))
1930+ self .set_transform (self ._get_xy_transform (
1931+ renderer , self .xy , self .anncoords ))
19211932
19221933 ox0 , oy0 = self ._get_xy_display ()
19231934 ox1 , oy1 = xy_pixel
0 commit comments