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

Skip to content

Commit d6e1577

Browse files
committed
Merge pull request #4019 from myshen/annot_neg_coords
BUG : fix negative coords in annotation
2 parents b280f7d + e095e65 commit d6e1577

File tree

3 files changed

+35
-6
lines changed

3 files changed

+35
-6
lines changed

lib/matplotlib/tests/test_text.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,8 +279,26 @@ def test_get_rotation_mod360():
279279
for i, j in zip([360., 377., 720+177.2], [0., 17., 177.2]):
280280
assert_almost_equal(text.get_rotation(i), j)
281281

282+
282283
@image_comparison(baseline_images=['text_bboxclip'])
283284
def test_bbox_clipping():
284285
plt.text(0.9, 0.2, 'Is bbox clipped?', backgroundcolor='r', clip_on=True)
285286
t = plt.text(0.9, 0.5, 'Is fancy bbox clipped?', clip_on=True)
286287
t.set_bbox({"boxstyle": "round, pad=0.1"})
288+
289+
290+
@image_comparison(baseline_images=['annotation_negative_coords'],
291+
extensions=['png'])
292+
def test_annotation_negative_coords():
293+
fig = plt.figure()
294+
ax = plt.subplot(1, 1, 1)
295+
296+
ax.annotate("+fpt", (15, 40), xycoords="figure points")
297+
ax.annotate("+fpx", (25, 30), xycoords="figure pixels")
298+
ax.annotate("+apt", (35, 20), xycoords="axes points")
299+
ax.annotate("+apx", (45, 10), xycoords="axes pixels")
300+
301+
ax.annotate("-fpt", (-55, -40), xycoords="figure points")
302+
ax.annotate("-fpx", (-45, -30), xycoords="figure pixels")
303+
ax.annotate("-apt", (-35, -20), xycoords="axes points")
304+
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
@@ -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

Comments
 (0)