@@ -1498,17 +1498,17 @@ def _get_xy(self, renderer, x, y, s):
1498
1498
if s2 == 'data' :
1499
1499
y = float (self .convert_yunits (y ))
1500
1500
1501
- tr = self ._get_xy_transform (renderer , s )
1501
+ tr = self ._get_xy_transform (renderer , ( x , y ), s )
1502
1502
x1 , y1 = tr .transform_point ((x , y ))
1503
1503
return x1 , y1
1504
1504
1505
- def _get_xy_transform (self , renderer , s ):
1505
+ def _get_xy_transform (self , renderer , xy , s ):
1506
1506
1507
1507
if isinstance (s , tuple ):
1508
1508
s1 , s2 = s
1509
1509
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 )
1512
1512
tr = blended_transform_factory (tr1 , tr2 )
1513
1513
return tr
1514
1514
@@ -1557,7 +1557,17 @@ def _get_xy_transform(self, renderer, s):
1557
1557
# bbox0 = self._get_bbox(renderer, bbox)
1558
1558
1559
1559
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 )
1561
1571
elif bbox_name == "offset" :
1562
1572
xy0 = self ._get_ref_xy (renderer )
1563
1573
@@ -1917,7 +1927,8 @@ def _update_position_xytext(self, renderer, xy_pixel):
1917
1927
patch.
1918
1928
"""
1919
1929
# 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 ))
1921
1932
1922
1933
ox0 , oy0 = self ._get_xy_display ()
1923
1934
ox1 , oy1 = xy_pixel
0 commit comments