Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit cf23500

Browse files
committed
Merge pull request matplotlib#4019 from myshen/annot_neg_coords
BUG : fix negative coords in annotation Conflicts: lib/matplotlib/tests/test_text.py cherry pick was too aggressive picking up tests from master
1 parent 9aa8e5f commit cf23500

File tree

3 files changed

+34
-6
lines changed

3 files changed

+34
-6
lines changed

lib/matplotlib/tests/test_text.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,3 +243,20 @@ def test_bbox_clipping():
243243
plt.text(0.9, 0.2, 'Is bbox clipped?', backgroundcolor='r', clip_on=True)
244244
t = plt.text(0.9, 0.5, 'Is fancy bbox clipped?', clip_on=True)
245245
t.set_bbox({"boxstyle": "round, pad=0.1"})
246+
247+
248+
@image_comparison(baseline_images=['annotation_negative_coords'],
249+
extensions=['png'])
250+
def test_annotation_negative_coords():
251+
fig = plt.figure()
252+
ax = plt.subplot(1, 1, 1)
253+
254+
ax.annotate("+fpt", (15, 40), xycoords="figure points")
255+
ax.annotate("+fpx", (25, 30), xycoords="figure pixels")
256+
ax.annotate("+apt", (35, 20), xycoords="axes points")
257+
ax.annotate("+apx", (45, 10), xycoords="axes pixels")
258+
259+
ax.annotate("-fpt", (-55, -40), xycoords="figure points")
260+
ax.annotate("-fpx", (-45, -30), xycoords="figure pixels")
261+
ax.annotate("-apt", (-35, -20), xycoords="axes points")
262+
ax.annotate("-apx", (-25, -10), xycoords="axes pixels")

lib/matplotlib/text.py

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)