From 24b16804731d3a724e4ec0984da140b1a6b05c66 Mon Sep 17 00:00:00 2001 From: Jody Klymak Date: Thu, 31 Mar 2022 10:10:10 +0200 Subject: [PATCH] MNT: make renderer always optional --- .../next_api_changes/behavior/22745-JMK.rst | 9 ++++ lib/matplotlib/_constrained_layout.py | 3 +- lib/matplotlib/_tight_layout.py | 12 ------ lib/matplotlib/artist.py | 4 +- lib/matplotlib/axes/_base.py | 4 +- lib/matplotlib/axis.py | 9 ++-- lib/matplotlib/collections.py | 2 +- lib/matplotlib/contour.py | 6 ++- lib/matplotlib/figure.py | 24 +++++++---- lib/matplotlib/gridspec.py | 2 +- lib/matplotlib/image.py | 2 +- lib/matplotlib/layout_engine.py | 4 +- lib/matplotlib/legend.py | 4 +- lib/matplotlib/lines.py | 2 +- lib/matplotlib/offsetbox.py | 41 +++++++++++++------ lib/matplotlib/table.py | 8 ++-- lib/matplotlib/text.py | 10 +++-- lib/matplotlib/widgets.py | 5 ++- lib/mpl_toolkits/axes_grid1/parasite_axes.py | 2 +- lib/mpl_toolkits/axisartist/axis_artist.py | 20 ++++++--- lib/mpl_toolkits/mplot3d/art3d.py | 2 +- lib/mpl_toolkits/mplot3d/axes3d.py | 2 +- lib/mpl_toolkits/mplot3d/axis3d.py | 2 +- 23 files changed, 109 insertions(+), 70 deletions(-) create mode 100644 doc/api/next_api_changes/behavior/22745-JMK.rst diff --git a/doc/api/next_api_changes/behavior/22745-JMK.rst b/doc/api/next_api_changes/behavior/22745-JMK.rst new file mode 100644 index 000000000000..7985d0e6a6fc --- /dev/null +++ b/doc/api/next_api_changes/behavior/22745-JMK.rst @@ -0,0 +1,9 @@ +No need to specify renderer for get_tightbbox and get_window_extent +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ``get_tightbbox`` and `~.Artist.get_window_extent` methods +no longer require the *renderer* kwarg, saving users from having to +querry it from ``fig.canvas.get_renderer``. If the *renderer* +kwarg is not supplied these methods first check if there is a cached renderer +from a previous draw and use that. If there is no cahched renderer, then +the methods will use ``fig.canvas.get_renderer()`` as a fallback. diff --git a/lib/matplotlib/_constrained_layout.py b/lib/matplotlib/_constrained_layout.py index de74303fc9c1..869d2c3bbc45 100644 --- a/lib/matplotlib/_constrained_layout.py +++ b/lib/matplotlib/_constrained_layout.py @@ -52,7 +52,6 @@ import numpy as np from matplotlib import _api, artist as martist -from matplotlib._tight_layout import get_renderer import matplotlib.transforms as mtransforms import matplotlib._layoutgrid as mlayoutgrid @@ -94,7 +93,7 @@ def do_constrained_layout(fig, h_pad, w_pad, layoutgrid : private debugging structure """ - renderer = get_renderer(fig) + renderer = fig._get_renderer() # make layoutgrid tree... layoutgrids = make_layoutgrids(fig, None, rect=rect) if not layoutgrids['hasgrids']: diff --git a/lib/matplotlib/_tight_layout.py b/lib/matplotlib/_tight_layout.py index 81465f9b5db6..b1d1ca0cff0f 100644 --- a/lib/matplotlib/_tight_layout.py +++ b/lib/matplotlib/_tight_layout.py @@ -198,18 +198,6 @@ def auto_adjust_subplotpars( ax_bbox_list, pad, h_pad, w_pad, rect) -def get_renderer(fig): - if fig._cachedRenderer: - return fig._cachedRenderer - else: - canvas = fig.canvas - if canvas and hasattr(canvas, "get_renderer"): - return canvas.get_renderer() - else: - from . import backend_bases - return backend_bases._get_renderer(fig) - - def get_subplotspec_list(axes_list, grid_spec=None): """ Return a list of subplotspec from the given list of axes. diff --git a/lib/matplotlib/artist.py b/lib/matplotlib/artist.py index 7e5d40c4749f..ed2ec140148d 100644 --- a/lib/matplotlib/artist.py +++ b/lib/matplotlib/artist.py @@ -298,7 +298,7 @@ def stale(self, val): if val and self.stale_callback is not None: self.stale_callback(self, val) - def get_window_extent(self, renderer): + def get_window_extent(self, renderer=None): """ Get the artist's bounding box in display space. @@ -318,7 +318,7 @@ def get_window_extent(self, renderer): """ return Bbox([[0, 0], [0, 0]]) - def get_tightbbox(self, renderer): + def get_tightbbox(self, renderer=None): """ Like `.Artist.get_window_extent`, but includes any clipping. diff --git a/lib/matplotlib/axes/_base.py b/lib/matplotlib/axes/_base.py index edef4b20fb3c..67bae7f79b72 100644 --- a/lib/matplotlib/axes/_base.py +++ b/lib/matplotlib/axes/_base.py @@ -4441,7 +4441,7 @@ def get_default_bbox_extra_artists(self): return [a for a in artists if a.get_visible() and a.get_in_layout() and (isinstance(a, noclip) or not a._fully_clipped_to_axes())] - def get_tightbbox(self, renderer, call_axes_locator=True, + def get_tightbbox(self, renderer=None, call_axes_locator=True, bbox_extra_artists=None, *, for_layout_only=False): """ Return the tight bounding box of the Axes, including axis and their @@ -4485,6 +4485,8 @@ def get_tightbbox(self, renderer, call_axes_locator=True, """ bb = [] + if renderer is None: + renderer = self.figure._get_renderer() if not self.get_visible(): return None diff --git a/lib/matplotlib/axis.py b/lib/matplotlib/axis.py index 3fc98a00b10d..be93a596d40b 100644 --- a/lib/matplotlib/axis.py +++ b/lib/matplotlib/axis.py @@ -1198,14 +1198,16 @@ def _update_ticks(self): return ticks_to_draw - def _get_ticklabel_bboxes(self, ticks, renderer): + def _get_ticklabel_bboxes(self, ticks, renderer=None): """Return lists of bboxes for ticks' label1's and label2's.""" + if renderer is None: + renderer = self.figure._get_renderer() return ([tick.label1.get_window_extent(renderer) for tick in ticks if tick.label1.get_visible()], [tick.label2.get_window_extent(renderer) for tick in ticks if tick.label2.get_visible()]) - def get_tightbbox(self, renderer, *, for_layout_only=False): + def get_tightbbox(self, renderer=None, *, for_layout_only=False): """ Return a bounding box that encloses the axis. It only accounts tick labels, axis label, and offsetText. @@ -1217,7 +1219,8 @@ def get_tightbbox(self, renderer, *, for_layout_only=False): """ if not self.get_visible(): return - + if renderer is None: + renderer = self.figure._get_renderer() ticks_to_draw = self._update_ticks() self._update_label_position(renderer) diff --git a/lib/matplotlib/collections.py b/lib/matplotlib/collections.py index db51fc0200c6..b45c65b1d92a 100644 --- a/lib/matplotlib/collections.py +++ b/lib/matplotlib/collections.py @@ -303,7 +303,7 @@ def get_datalim(self, transData): return bbox return transforms.Bbox.null() - def get_window_extent(self, renderer): + def get_window_extent(self, renderer=None): # TODO: check to ensure that this does not fail for # cases other than scatter plot legend return self.get_datalim(transforms.IdentityTransform()) diff --git a/lib/matplotlib/contour.py b/lib/matplotlib/contour.py index 2b34c3f524c8..d666a906812d 100644 --- a/lib/matplotlib/contour.py +++ b/lib/matplotlib/contour.py @@ -251,13 +251,14 @@ def too_close(self, x, y, lw): def _get_nth_label_width(self, nth): """Return the width of the *nth* label, in pixels.""" fig = self.axes.figure + renderer = fig._get_renderer() return ( text.Text(0, 0, self.get_text(self.labelLevelList[nth], self.labelFmt), figure=fig, size=self.labelFontSizeList[nth], fontproperties=self.labelFontProps) - .get_window_extent(mpl._tight_layout.get_renderer(fig)).width) + .get_window_extent(renderer).width) @_api.deprecated("3.5") def get_label_width(self, lev, fmt, fsize): @@ -265,9 +266,10 @@ def get_label_width(self, lev, fmt, fsize): if not isinstance(lev, str): lev = self.get_text(lev, fmt) fig = self.axes.figure + renderer = fig._get_renderer() width = (text.Text(0, 0, lev, figure=fig, size=fsize, fontproperties=self.labelFontProps) - .get_window_extent(mpl._tight_layout.get_renderer(fig)).width) + .get_window_extent(renderer).width) width *= 72 / fig.dpi return width diff --git a/lib/matplotlib/figure.py b/lib/matplotlib/figure.py index d0d9f8e695dc..d7ab8534c913 100644 --- a/lib/matplotlib/figure.py +++ b/lib/matplotlib/figure.py @@ -1618,7 +1618,7 @@ def get_default_bbox_extra_artists(self): bbox_artists.extend(ax.get_default_bbox_extra_artists()) return bbox_artists - def get_tightbbox(self, renderer, bbox_extra_artists=None): + def get_tightbbox(self, renderer=None, bbox_extra_artists=None): """ Return a (tight) bounding box of the figure *in inches*. @@ -1645,6 +1645,9 @@ def get_tightbbox(self, renderer, bbox_extra_artists=None): containing the bounding box (in figure inches). """ + if renderer is None: + renderer = self.figure._get_renderer() + bb = [] if bbox_extra_artists is None: artists = self.get_default_bbox_extra_artists() @@ -2060,13 +2063,8 @@ def dpi(self): def dpi(self, value): self._parent.dpi = value - @property - def _cachedRenderer(self): - return self._parent._cachedRenderer - - @_cachedRenderer.setter - def _cachedRenderer(self, renderer): - self._parent._cachedRenderer = renderer + def _get_renderer(self): + return self._parent._get_renderer() def _redo_transform_rel_fig(self, bbox=None): """ @@ -2496,6 +2494,14 @@ def axes(self): get_axes = axes.fget + def _get_renderer(self): + if self._cachedRenderer is not None: + return self._cachedRenderer + elif hasattr(self.canvas, 'get_renderer'): + return self.canvas.get_renderer() + else: + return _get_renderer(self) + def _get_dpi(self): return self._dpi @@ -2644,7 +2650,7 @@ def get_constrained_layout_pads(self, relative=False): hspace = info['hspace'] if relative and (w_pad is not None or h_pad is not None): - renderer = _get_renderer(self) + renderer = self._get_renderer() dpi = renderer.dpi w_pad = w_pad * dpi / renderer.width h_pad = h_pad * dpi / renderer.height diff --git a/lib/matplotlib/gridspec.py b/lib/matplotlib/gridspec.py index 91b42f69516f..1258920d6027 100644 --- a/lib/matplotlib/gridspec.py +++ b/lib/matplotlib/gridspec.py @@ -474,7 +474,7 @@ def tight_layout(self, figure, renderer=None, "might be incorrect.") if renderer is None: - renderer = _tight_layout.get_renderer(figure) + renderer = figure._get_renderer() kwargs = _tight_layout.get_tight_layout_figure( figure, figure.axes, subplotspec_list, renderer, diff --git a/lib/matplotlib/image.py b/lib/matplotlib/image.py index f8a93c4d7757..ad27dbeee274 100644 --- a/lib/matplotlib/image.py +++ b/lib/matplotlib/image.py @@ -1425,7 +1425,7 @@ def __init__(self, bbox, def get_window_extent(self, renderer=None): if renderer is None: - renderer = self.get_figure()._cachedRenderer + renderer = self.get_figure()._get_renderer() if isinstance(self.bbox, BboxBase): return self.bbox diff --git a/lib/matplotlib/layout_engine.py b/lib/matplotlib/layout_engine.py index fa4281a2ba02..c71d0dc74eaa 100644 --- a/lib/matplotlib/layout_engine.py +++ b/lib/matplotlib/layout_engine.py @@ -22,8 +22,6 @@ from matplotlib._constrained_layout import do_constrained_layout from matplotlib._tight_layout import (get_subplotspec_list, get_tight_layout_figure) -# from matplotlib.backend_bases import _get_renderer -from matplotlib._tight_layout import get_renderer class LayoutEngine: @@ -154,7 +152,7 @@ def execute(self, fig): _api.warn_external("This figure includes Axes that are not " "compatible with tight_layout, so results " "might be incorrect.") - renderer = get_renderer(fig) + renderer = fig._get_renderer() with getattr(renderer, "_draw_disabled", nullcontext)(): kwargs = get_tight_layout_figure( fig, fig.axes, subplotspec_list, renderer, diff --git a/lib/matplotlib/legend.py b/lib/matplotlib/legend.py index 27069efaffb0..ffe043c67461 100644 --- a/lib/matplotlib/legend.py +++ b/lib/matplotlib/legend.py @@ -883,10 +883,10 @@ def get_title(self): def get_window_extent(self, renderer=None): # docstring inherited if renderer is None: - renderer = self.figure._cachedRenderer + renderer = self.figure._get_renderer() return self._legend_box.get_window_extent(renderer=renderer) - def get_tightbbox(self, renderer): + def get_tightbbox(self, renderer=None): # docstring inherited return self._legend_box.get_window_extent(renderer) diff --git a/lib/matplotlib/lines.py b/lib/matplotlib/lines.py index c070f8706bc1..226787c2b6a8 100644 --- a/lib/matplotlib/lines.py +++ b/lib/matplotlib/lines.py @@ -616,7 +616,7 @@ def get_bbox(self): bbox.update_from_data_xy(self.get_xydata()) return bbox - def get_window_extent(self, renderer): + def get_window_extent(self, renderer=None): bbox = Bbox([[0, 0], [0, 0]]) trans_data_to_xy = self.get_transform().transform bbox.update_from_data_xy(trans_data_to_xy(self.get_xydata()), diff --git a/lib/matplotlib/offsetbox.py b/lib/matplotlib/offsetbox.py index 40dd6901325a..9eb61a0d71e3 100644 --- a/lib/matplotlib/offsetbox.py +++ b/lib/matplotlib/offsetbox.py @@ -345,8 +345,10 @@ def get_extent(self, renderer): w, h, xd, yd, offsets = self.get_extent_offsets(renderer) return w, h, xd, yd - def get_window_extent(self, renderer): + def get_window_extent(self, renderer=None): # docstring inherited + if renderer is None: + renderer = self.figure._get_renderer() w, h, xd, yd, offsets = self.get_extent_offsets(renderer) px, py = self.get_offset(w, h, xd, yd, renderer) return mtransforms.Bbox.from_bounds(px - xd, py - yd, w, h) @@ -631,8 +633,10 @@ def get_offset(self): """Return offset of the container.""" return self._offset - def get_window_extent(self, renderer): + def get_window_extent(self, renderer=None): # docstring inherited + if renderer is None: + renderer = self.figure._get_renderer() w, h, xd, yd = self.get_extent(renderer) ox, oy = self.get_offset() # w, h, xd, yd) @@ -765,8 +769,10 @@ def get_offset(self): """Return offset of the container.""" return self._offset - def get_window_extent(self, renderer): + def get_window_extent(self, renderer=None): # docstring inherited + if renderer is None: + renderer = self.figure._get_renderer() w, h, xd, yd = self.get_extent(renderer) ox, oy = self.get_offset() return mtransforms.Bbox.from_bounds(ox - xd, oy - yd, w, h) @@ -866,8 +872,10 @@ def get_offset(self): """Return offset of the container.""" return self._offset - def get_window_extent(self, renderer): + def get_window_extent(self, renderer=None): # docstring inherited + if renderer is None: + renderer = self.figure._get_renderer() w, h, xd, yd = self.get_extent(renderer) ox, oy = self.get_offset() # w, h, xd, yd) return mtransforms.Bbox.from_bounds(ox - xd, oy - yd, w, h) @@ -1048,8 +1056,11 @@ def set_bbox_to_anchor(self, bbox, transform=None): self._bbox_to_anchor_transform = transform self.stale = True - def get_window_extent(self, renderer): + def get_window_extent(self, renderer=None): # docstring inherited + if renderer is None: + renderer = self.figure._get_renderer() + self._update_offset_func(renderer) w, h, xd, yd = self.get_extent(renderer) ox, oy = self.get_offset(w, h, xd, yd, renderer) @@ -1211,8 +1222,10 @@ def get_offset(self): def get_children(self): return [self.image] - def get_window_extent(self, renderer): + def get_window_extent(self, renderer=None): # docstring inherited + if renderer is None: + renderer = self.figure._get_renderer() w, h, xd, yd = self.get_extent(renderer) ox, oy = self.get_offset() return mtransforms.Bbox.from_bounds(ox - xd, oy - yd, w, h) @@ -1390,12 +1403,14 @@ def get_fontsize(self): """Return the fontsize in points.""" return self.prop.get_size_in_points() - def get_window_extent(self, renderer): + def get_window_extent(self, renderer=None): # docstring inherited + if renderer is None: + renderer = self.figure._get_renderer() return Bbox.union([child.get_window_extent(renderer) for child in self.get_children()]) - def get_tightbbox(self, renderer): + def get_tightbbox(self, renderer=None): # docstring inherited return Bbox.union([child.get_tightbbox(renderer) for child in self.get_children()]) @@ -1511,7 +1526,8 @@ def on_motion(self, evt): self.update_offset(dx, dy) if self._use_blit: self.canvas.restore_region(self.background) - self.ref_artist.draw(self.ref_artist.figure._cachedRenderer) + self.ref_artist.draw( + self.ref_artist.figure._get_renderer()) self.canvas.blit() else: self.canvas.draw() @@ -1526,7 +1542,8 @@ def on_pick(self, evt): self.canvas.draw() self.background = \ self.canvas.copy_from_bbox(self.ref_artist.figure.bbox) - self.ref_artist.draw(self.ref_artist.figure._cachedRenderer) + self.ref_artist.draw( + self.ref_artist.figure._get_renderer()) self.canvas.blit() self._c1 = self.canvas.callbacks._connect_picklable( "motion_notify_event", self.on_motion) @@ -1576,7 +1593,7 @@ def __init__(self, ref_artist, offsetbox, use_blit=False): def save_offset(self): offsetbox = self.offsetbox - renderer = offsetbox.figure._cachedRenderer + renderer = offsetbox.figure._get_renderer() w, h, xd, yd = offsetbox.get_extent(renderer) offset = offsetbox.get_offset(w, h, xd, yd, renderer) self.offsetbox_x, self.offsetbox_y = offset @@ -1588,7 +1605,7 @@ def update_offset(self, dx, dy): def get_loc_in_canvas(self): offsetbox = self.offsetbox - renderer = offsetbox.figure._cachedRenderer + renderer = offsetbox.figure._get_renderer() w, h, xd, yd = offsetbox.get_extent(renderer) ox, oy = offsetbox._offset loc_in_canvas = (ox - xd, oy - yd) diff --git a/lib/matplotlib/table.py b/lib/matplotlib/table.py index b91b2a59ed03..4201e25bdf3f 100644 --- a/lib/matplotlib/table.py +++ b/lib/matplotlib/table.py @@ -398,7 +398,7 @@ def draw(self, renderer): # Need a renderer to do hit tests on mouseevent; assume the last one # will do if renderer is None: - renderer = self.figure._cachedRenderer + renderer = self.figure._get_renderer() if renderer is None: raise RuntimeError('No renderer defined') @@ -432,7 +432,7 @@ def contains(self, mouseevent): return inside, info # TODO: Return index of the cell containing the cursor so that the user # doesn't have to bind to each one individually. - renderer = self.figure._cachedRenderer + renderer = self.figure._get_renderer() if renderer is not None: boxes = [cell.get_window_extent(renderer) for (row, col), cell in self._cells.items() @@ -446,8 +446,10 @@ def get_children(self): """Return the Artists contained by the table.""" return list(self._cells.values()) - def get_window_extent(self, renderer): + def get_window_extent(self, renderer=None): # docstring inherited + if renderer is None: + renderer = self.figure._get_renderer() self._update_positions(renderer) boxes = [cell.get_window_extent(renderer) for cell in self._cells.values()] diff --git a/lib/matplotlib/text.py b/lib/matplotlib/text.py index b1d2a96d9bf8..1601a49d31b6 100644 --- a/lib/matplotlib/text.py +++ b/lib/matplotlib/text.py @@ -905,7 +905,7 @@ def get_window_extent(self, renderer=None, dpi=None): if renderer is not None: self._renderer = renderer if self._renderer is None: - self._renderer = self.figure._cachedRenderer + self._renderer = self.figure._get_renderer() if self._renderer is None: raise RuntimeError( "Cannot get window extent of text w/o renderer. You likely " @@ -1567,8 +1567,10 @@ def _get_position_xy(self, renderer): x, y = self.xy return self._get_xy(renderer, x, y, self.xycoords) - def _check_xy(self, renderer): + def _check_xy(self, renderer=None): """Check whether the annotation at *xy_pixel* should be drawn.""" + if renderer is None: + renderer = self.figure._get_renderer() b = self.get_annotation_clip() if b or (b is None and self.xycoords == "data"): # check if self.xy is inside the axes. @@ -1999,7 +2001,7 @@ def get_window_extent(self, renderer=None): if renderer is not None: self._renderer = renderer if self._renderer is None: - self._renderer = self.figure._cachedRenderer + self._renderer = self.figure._get_renderer() if self._renderer is None: raise RuntimeError('Cannot get window extent w/o renderer') @@ -2013,7 +2015,7 @@ def get_window_extent(self, renderer=None): return Bbox.union(bboxes) - def get_tightbbox(self, renderer): + def get_tightbbox(self, renderer=None): # docstring inherited if not self._check_xy(renderer): return Bbox.null() diff --git a/lib/matplotlib/widgets.py b/lib/matplotlib/widgets.py index 8b04b9bf2c52..12142effff7a 100644 --- a/lib/matplotlib/widgets.py +++ b/lib/matplotlib/widgets.py @@ -1201,7 +1201,7 @@ def _rendercursor(self): # This causes a single extra draw if the figure has never been rendered # yet, which should be fine as we're going to repeatedly re-render the # figure later anyways. - if self.ax.figure._cachedRenderer is None: + if self.ax.figure._get_renderer() is None: self.ax.figure.canvas.draw() text = self.text_disp.get_text() # Save value before overwriting it. @@ -1917,7 +1917,8 @@ def ignore(self, event): def update(self): """Draw using blit() or draw_idle(), depending on ``self.useblit``.""" - if not self.ax.get_visible() or self.ax.figure._cachedRenderer is None: + if (not self.ax.get_visible() or + self.ax.figure._get_renderer() is None): return False if self.useblit: if self.background is not None: diff --git a/lib/mpl_toolkits/axes_grid1/parasite_axes.py b/lib/mpl_toolkits/axes_grid1/parasite_axes.py index 760c15fb8bb3..b959d1f48a49 100644 --- a/lib/mpl_toolkits/axes_grid1/parasite_axes.py +++ b/lib/mpl_toolkits/axes_grid1/parasite_axes.py @@ -215,7 +215,7 @@ def _remove_any_twin(self, ax): self.axis[tuple(restore)].set_visible(True) self.axis[tuple(restore)].toggle(ticklabels=False, label=False) - def get_tightbbox(self, renderer, call_axes_locator=True, + def get_tightbbox(self, renderer=None, call_axes_locator=True, bbox_extra_artists=None): bbs = [ *[ax.get_tightbbox(renderer, call_axes_locator=call_axes_locator) diff --git a/lib/mpl_toolkits/axisartist/axis_artist.py b/lib/mpl_toolkits/axisartist/axis_artist.py index a41c34dc58bd..d431b888d091 100644 --- a/lib/mpl_toolkits/axisartist/axis_artist.py +++ b/lib/mpl_toolkits/axisartist/axis_artist.py @@ -250,7 +250,10 @@ def draw(self, renderer): self.set_transform(tr) self.set_rotation(angle_orig) - def get_window_extent(self, renderer): + def get_window_extent(self, renderer=None): + if renderer is None: + renderer = self.figure._get_renderer() + # save original and adjust some properties tr = self.get_transform() angle_orig = self.get_rotation() @@ -361,7 +364,9 @@ def draw(self, renderer): super().draw(renderer) - def get_window_extent(self, renderer): + def get_window_extent(self, renderer=None): + if renderer is None: + renderer = self.figure._get_renderer() if not self.get_visible(): return @@ -513,7 +518,9 @@ def draw(self, renderer): def set_locs_angles_labels(self, locs_angles_labels): self._locs_angles_labels = locs_angles_labels - def get_window_extents(self, renderer): + def get_window_extents(self, renderer=None): + if renderer is None: + renderer = self.figure._get_renderer() if not self.get_visible(): self._axislabel_pad = self._external_pad @@ -846,10 +853,13 @@ def _get_tick_info(self, tick_iter): return ticks_loc_angle, ticklabels_loc_angle_label - def _update_ticks(self, renderer): + def _update_ticks(self, renderer=None): # set extra pad for major and minor ticklabels: use ticksize of # majorticks even for minor ticks. not clear what is best. + if renderer is None: + renderer = self.figure._get_renderer() + dpi_cor = renderer.points_to_pixels(1.) if self.major_ticks.get_visible() and self.major_ticks.get_tick_out(): ticklabel_pad = self.major_ticks._ticksize * dpi_cor @@ -963,7 +973,7 @@ def _draw_label(self, renderer): def set_label(self, s): self.label.set_text(s) - def get_tightbbox(self, renderer): + def get_tightbbox(self, renderer=None): if not self.get_visible(): return self._axis_artist_helper.update_lim(self.axes) diff --git a/lib/mpl_toolkits/mplot3d/art3d.py b/lib/mpl_toolkits/mplot3d/art3d.py index 4f551fea8a71..acbeca931c38 100644 --- a/lib/mpl_toolkits/mplot3d/art3d.py +++ b/lib/mpl_toolkits/mplot3d/art3d.py @@ -144,7 +144,7 @@ def draw(self, renderer): mtext.Text.draw(self, renderer) self.stale = False - def get_tightbbox(self, renderer): + def get_tightbbox(self, renderer=None): # Overwriting the 2d Text behavior which is not valid for 3d. # For now, just return None to exclude from layout calculation. return None diff --git a/lib/mpl_toolkits/mplot3d/axes3d.py b/lib/mpl_toolkits/mplot3d/axes3d.py index fb93342f49ae..9db44b7994bb 100644 --- a/lib/mpl_toolkits/mplot3d/axes3d.py +++ b/lib/mpl_toolkits/mplot3d/axes3d.py @@ -3096,7 +3096,7 @@ def _digout_minmax(err_arr, coord_label): return errlines, caplines, limmarks - def get_tightbbox(self, renderer, call_axes_locator=True, + def get_tightbbox(self, renderer=None, call_axes_locator=True, bbox_extra_artists=None, *, for_layout_only=False): ret = super().get_tightbbox(renderer, call_axes_locator=call_axes_locator, diff --git a/lib/mpl_toolkits/mplot3d/axis3d.py b/lib/mpl_toolkits/mplot3d/axis3d.py index e5cd565825ec..d08576904d29 100644 --- a/lib/mpl_toolkits/mplot3d/axis3d.py +++ b/lib/mpl_toolkits/mplot3d/axis3d.py @@ -483,7 +483,7 @@ def draw(self, renderer): # TODO: Get this to work (more) properly when mplot3d supports the # transforms framework. - def get_tightbbox(self, renderer, *, for_layout_only=False): + def get_tightbbox(self, renderer=None, *, for_layout_only=False): # docstring inherited if not self.get_visible(): return