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

Skip to content

Commit ec6e188

Browse files
committed
Simplify Annotation and Text bbox drawing.
Currently Annotation.draw goes through _check_xy to check whether the annotation should be drawn at all, and then through _update_position_xytext to position itself. In order to save a single call to _get_position_xy, it first calls _get_position_xy itself and then passes it down to the helper functions, making them harder to follow. Instead, just let _check_xy call _get_position_xy itself (and even then, this is only needed for some values of annotation_clip), and likewise for _update_position_xytext (which just becomes a call to update_positions). Also a small shortening of Text.update_bbox_position_size.
1 parent a769d64 commit ec6e188

File tree

2 files changed

+10
-32
lines changed

2 files changed

+10
-32
lines changed

lib/matplotlib/offsetbox.py

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1652,27 +1652,17 @@ def _update_position_xybox(self, renderer, xy_pixel):
16521652

16531653
def draw(self, renderer):
16541654
# docstring inherited
1655-
16561655
if renderer is not None:
16571656
self._renderer = renderer
1658-
if not self.get_visible():
1659-
return
1660-
1661-
xy_pixel = self._get_position_xy(renderer)
1662-
1663-
if not self._check_xy(renderer, xy_pixel):
1657+
if not self.get_visible() or not self._check_xy(renderer):
16641658
return
1665-
16661659
self.update_positions(renderer)
1667-
16681660
if self.arrow_patch is not None:
16691661
if self.arrow_patch.figure is None and self.figure is not None:
16701662
self.arrow_patch.figure = self.figure
16711663
self.arrow_patch.draw(renderer)
1672-
16731664
if self._drawFrame:
16741665
self.patch.draw(renderer)
1675-
16761666
self.offsetbox.draw(renderer)
16771667
self.stale = False
16781668

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)