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 pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy