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

Skip to content

Commit 3fd822c

Browse files
committed
Nullary offset dynamic computers.
1 parent d3f410d commit 3fd822c

File tree

3 files changed

+17
-16
lines changed

3 files changed

+17
-16
lines changed

lib/matplotlib/legend.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -585,8 +585,11 @@ def _get_loc(self):
585585

586586
_loc = property(_get_loc, _set_loc)
587587

588-
def _findoffset(self, width, height, xdescent, ydescent, renderer):
588+
def _findoffset(self):
589589
"""Helper function to locate the legend."""
590+
renderer = self.figure._cachedRenderer or self._cached_renderer
591+
width, height, xdescent, ydescent = self._legend_box.get_extent(
592+
renderer)
590593

591594
if self._loc == 0: # "best".
592595
x, y = self._find_best_position(width, height, renderer)
@@ -882,6 +885,8 @@ def get_window_extent(self, renderer=None):
882885
# docstring inherited
883886
if renderer is None:
884887
renderer = self.figure._cachedRenderer
888+
# May not be cached on the figure, so cache it ourselves.
889+
self._cached_renderer = renderer
885890
return self._legend_box.get_window_extent(renderer=renderer)
886891

887892
def get_tightbbox(self, renderer):

lib/matplotlib/offsetbox.py

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -263,11 +263,9 @@ def set_offset(self, xy):
263263
xy : (float, float) or callable
264264
The (x, y) coordinates of the offset in display units. These can
265265
either be given explicitly as a tuple (x, y), or by providing a
266-
function that converts the extent into the offset. This function
267-
must have the signature::
268-
269-
def offset(width, height, xdescent, ydescent, renderer) \
270-
-> (float, float)
266+
function dynamically computes an offset (taking the arguments
267+
passed to `.OffsetBox.get_offset`). It is recommended, but not
268+
compulsory, to make such functions take no arguments.
271269
"""
272270
self._offset = xy
273271
self.stale = True
@@ -340,7 +338,7 @@ def get_extent(self, renderer):
340338
def get_window_extent(self, renderer):
341339
# docstring inherited
342340
w, h, xd, yd = self.get_extent(renderer)
343-
px, py = self.get_offset(w, h, xd, yd, renderer)
341+
px, py = self.get_offset()
344342
return mtransforms.Bbox.from_bounds(px - xd, py - yd, w, h)
345343

346344
def draw(self, renderer):
@@ -349,7 +347,7 @@ def draw(self, renderer):
349347
to the given *renderer*.
350348
"""
351349
w, h, xdescent, ydescent, offsets = self.get_extent_offsets(renderer)
352-
px, py = self.get_offset(w, h, xdescent, ydescent, renderer)
350+
px, py = self.get_offset()
353351
for c, (ox, oy) in zip(self.get_visible_children(), offsets):
354352
c.set_offset((px + ox, py + oy))
355353
c.draw(renderer)
@@ -530,7 +528,7 @@ def get_extent_offsets(self, renderer):
530528
def draw(self, renderer):
531529
# docstring inherited
532530
w, h, xdescent, ydescent, offsets = self.get_extent_offsets(renderer)
533-
px, py = self.get_offset(w, h, xdescent, ydescent, renderer)
531+
px, py = self.get_offset()
534532
for c, (ox, oy) in zip(self.get_visible_children(), offsets):
535533
c.set_offset((px + ox, py + oy))
536534

@@ -1037,9 +1035,10 @@ def get_window_extent(self, renderer):
10371035
# docstring inherited
10381036
# Update the offset func, which depends on the dpi of the renderer
10391037
# (because of the padding).
1038+
w, h, xd, yd = self.get_extent(renderer)
10401039
fontsize = renderer.points_to_pixels(self.prop.get_size_in_points())
10411040

1042-
def _offset(w, h, xd, yd, renderer):
1041+
def _offset(*args, **kwargs): # args are ignored; left for backcompat.
10431042
bbox = Bbox.from_bounds(0, 0, w, h)
10441043
pad = self.borderpad * fontsize
10451044
bbox_to_anchor = self.get_bbox_to_anchor()
@@ -1065,9 +1064,7 @@ def draw(self, renderer):
10651064
self.update_frame(bbox, fontsize)
10661065
self.patch.draw(renderer)
10671066

1068-
width, height, xdescent, ydescent = self.get_extent(renderer)
1069-
1070-
px, py = self.get_offset(width, height, xdescent, ydescent, renderer)
1067+
px, py = self.get_offset()
10711068

10721069
self.get_child().set_offset((px, py))
10731070
self.get_child().draw(renderer)
@@ -1566,8 +1563,7 @@ def __init__(self, ref_artist, offsetbox, use_blit=False):
15661563
def save_offset(self):
15671564
offsetbox = self.offsetbox
15681565
renderer = offsetbox.figure._cachedRenderer
1569-
w, h, xd, yd = offsetbox.get_extent(renderer)
1570-
offset = offsetbox.get_offset(w, h, xd, yd, renderer)
1566+
offset = offsetbox.get_offset()
15711567
self.offsetbox_x, self.offsetbox_y = offset
15721568
self.offsetbox.set_offset(offset)
15731569

lib/mpl_toolkits/axes_grid1/inset_locator.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ def draw(self, renderer):
7171
def __call__(self, ax, renderer):
7272
self.axes = ax
7373
bbox = self.get_window_extent(renderer)
74-
px, py = self.get_offset(bbox.width, bbox.height, 0, 0, renderer)
74+
px, py = self.get_offset()
7575
bbox_canvas = Bbox.from_bounds(px, py, bbox.width, bbox.height)
7676
tr = ax.figure.transFigure.inverted()
7777
return TransformedBbox(bbox_canvas, tr)

0 commit comments

Comments
 (0)