Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit ec6e188

Browse filesBrowse 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
Copy full SHA for ec6e188

File tree

Expand file treeCollapse file tree

2 files changed

+10
-32
lines changed
Filter options
Expand file treeCollapse file tree

2 files changed

+10
-32
lines changed

‎lib/matplotlib/offsetbox.py

Copy file name to clipboardExpand all lines: lib/matplotlib/offsetbox.py
+1-11Lines 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

Copy file name to clipboardExpand all lines: lib/matplotlib/text.py
+9-21Lines 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 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.