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

Skip to content

Commit 95ada39

Browse files
authored
Merge pull request #17220 from anntzer/ann
Simplify Annotation and Text bbox drawing.
2 parents 9c89f7a + d79dfaa commit 95ada39

File tree

2 files changed

+12
-39
lines changed

2 files changed

+12
-39
lines changed

lib/matplotlib/offsetbox.py

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1507,28 +1507,21 @@ def contains(self, mouseevent):
15071507
inside, info = self._default_contains(mouseevent)
15081508
if inside is not None:
15091509
return inside, info
1510-
1511-
xy_pixel = self._get_position_xy(None)
1512-
if not self._check_xy(None, xy_pixel):
1510+
if not self._check_xy(None):
15131511
return False, {}
1514-
1515-
t, tinfo = self.offsetbox.contains(mouseevent)
1512+
return self.offsetbox.contains(mouseevent)
15161513
#if self.arrow_patch is not None:
15171514
# a, ainfo=self.arrow_patch.contains(event)
15181515
# t = t or a
1519-
15201516
# self.arrow_patch is currently not checked as this can be a line - JJ
15211517

1522-
return t, tinfo
1523-
15241518
def get_children(self):
15251519
children = [self.offsetbox, self.patch]
15261520
if self.arrow_patch:
15271521
children.append(self.arrow_patch)
15281522
return children
15291523

15301524
def set_figure(self, fig):
1531-
15321525
if self.arrow_patch is not None:
15331526
self.arrow_patch.set_figure(fig)
15341527
self.offsetbox.set_figure(fig)
@@ -1623,23 +1616,15 @@ def _update_position_xybox(self, renderer, xy_pixel):
16231616

16241617
def draw(self, renderer):
16251618
# docstring inherited
1626-
16271619
if renderer is not None:
16281620
self._renderer = renderer
1629-
if not self.get_visible():
1621+
if not self.get_visible() or not self._check_xy(renderer):
16301622
return
1631-
1632-
xy_pixel = self._get_position_xy(renderer)
1633-
if not self._check_xy(renderer, xy_pixel):
1634-
return
1635-
16361623
self.update_positions(renderer)
1637-
16381624
if self.arrow_patch is not None:
16391625
if self.arrow_patch.figure is None and self.figure is not None:
16401626
self.arrow_patch.figure = self.figure
16411627
self.arrow_patch.draw(renderer)
1642-
16431628
self.patch.draw(renderer)
16441629
self.offsetbox.draw(renderer)
16451630
self.stale = False

lib/matplotlib/text.py

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -502,10 +502,10 @@ def update_bbox_position_size(self, renderer):
502502

503503
x_box, y_box, w_box, h_box = _get_textbox(self, renderer)
504504
self._bbox_patch.set_bounds(0., 0., w_box, h_box)
505-
theta = np.deg2rad(self.get_rotation())
506-
tr = Affine2D().rotate(theta)
507-
tr = tr.translate(posx + x_box, posy + y_box)
508-
self._bbox_patch.set_transform(tr)
505+
self._bbox_patch.set_transform(
506+
Affine2D()
507+
.rotate_deg(self.get_rotation())
508+
.translate(posx + x_box, posy + y_box))
509509
fontsize_in_pixel = renderer.points_to_pixels(self.get_size())
510510
self._bbox_patch.set_mutation_scale(fontsize_in_pixel)
511511

@@ -1481,11 +1481,12 @@ def _get_position_xy(self, renderer):
14811481
x, y = self.xy
14821482
return self._get_xy(renderer, x, y, self.xycoords)
14831483

1484-
def _check_xy(self, renderer, xy_pixel):
1484+
def _check_xy(self, renderer):
14851485
"""Check whether the annotation at *xy_pixel* should be drawn."""
14861486
b = self.get_annotation_clip()
14871487
if b or (b is None and self.xycoords == "data"):
14881488
# check if self.xy is inside the axes.
1489+
xy_pixel = self._get_position_xy(renderer)
14891490
return self.axes.contains_point(xy_pixel)
14901491
return True
14911492

@@ -1811,21 +1812,16 @@ def set_figure(self, fig):
18111812
Artist.set_figure(self, fig)
18121813

18131814
def update_positions(self, renderer):
1814-
"""Update the pixel positions of the annotated point and the text."""
1815-
xy_pixel = self._get_position_xy(renderer)
1816-
self._update_position_xytext(renderer, xy_pixel)
1817-
1818-
def _update_position_xytext(self, renderer, xy_pixel):
18191815
"""
18201816
Update the pixel positions of the annotation text and the arrow patch.
18211817
"""
1818+
x1, y1 = self._get_position_xy(renderer) # Annotated position.
18221819
# generate transformation,
18231820
self.set_transform(self._get_xy_transform(renderer, self.anncoords))
18241821

18251822
if self.arrowprops is None:
18261823
return
18271824

1828-
x1, y1 = xy_pixel # Annotated position.
18291825
bbox = Text.get_window_extent(self, renderer)
18301826

18311827
d = self.arrowprops.copy()
@@ -1893,24 +1889,16 @@ def _update_position_xytext(self, renderer, xy_pixel):
18931889
@artist.allow_rasterization
18941890
def draw(self, renderer):
18951891
# docstring inherited
1896-
18971892
if renderer is not None:
18981893
self._renderer = renderer
1899-
if not self.get_visible():
1900-
return
1901-
1902-
xy_pixel = self._get_position_xy(renderer)
1903-
if not self._check_xy(renderer, xy_pixel):
1894+
if not self.get_visible() or not self._check_xy(renderer):
19041895
return
1905-
1906-
self._update_position_xytext(renderer, xy_pixel)
1896+
self.update_positions(renderer)
19071897
self.update_bbox_position_size(renderer)
1908-
19091898
if self.arrow_patch is not None: # FancyArrowPatch
19101899
if self.arrow_patch.figure is None and self.figure is not None:
19111900
self.arrow_patch.figure = self.figure
19121901
self.arrow_patch.draw(renderer)
1913-
19141902
# Draw text, including FancyBboxPatch, after FancyArrowPatch.
19151903
# Otherwise, a wedge arrowstyle can land partly on top of the Bbox.
19161904
Text.draw(self, renderer)

0 commit comments

Comments
 (0)