Skip to content

Commit cf23500

Browse files
committed
Merge pull request #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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy