Skip to content

Commit 64fc6fb

Browse files
committed
Add a Figure._get_cachedRenderer() method
1 parent 7f92f6a commit 64fc6fb

File tree

3 files changed

+17
-5
lines changed

3 files changed

+17
-5
lines changed

lib/matplotlib/figure.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2376,6 +2376,13 @@ def axes(self):
23762376

23772377
get_axes = axes.fget
23782378

2379+
def _get_cachedRenderer(self, error_if_none=True):
2380+
# Get the cached renderer, raising an error if it doesn't exist yet
2381+
if error_if_none and self._cachedRenderer is None:
2382+
raise RuntimeError("This code can only be used after an "
2383+
"initial draw which caches the renderer.")
2384+
return self._cachedRenderer
2385+
23792386
def _get_dpi(self):
23802387
return self._dpi
23812388

@@ -2829,10 +2836,7 @@ def draw_artist(self, a):
28292836
This method can only be used after an initial draw of the figure,
28302837
because that creates and caches the renderer needed here.
28312838
"""
2832-
if self._cachedRenderer is None:
2833-
raise AttributeError("draw_artist can only be used after an "
2834-
"initial draw which caches the renderer")
2835-
a.draw(self._cachedRenderer)
2839+
a.draw(self._get_cachedRenderer())
28362840

28372841
def __getstate__(self):
28382842
state = super().__getstate__()

lib/matplotlib/legend.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -881,7 +881,7 @@ def get_title(self):
881881
def get_window_extent(self, renderer=None):
882882
# docstring inherited
883883
if renderer is None:
884-
renderer = self.figure._cachedRenderer
884+
renderer = self.figure._get_cachedRenderer()
885885
return self._legend_box.get_window_extent(renderer=renderer)
886886

887887
def get_tightbbox(self, renderer):

lib/matplotlib/tests/test_legend.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -880,3 +880,11 @@ def test_subfigure_legend():
880880
ax.plot([0, 1], [0, 1], label="line")
881881
leg = subfig.legend()
882882
assert leg.figure is subfig
883+
884+
885+
def test_no_renderer_error():
886+
leg = plt.legend()
887+
with pytest.raises(
888+
RuntimeError,
889+
match='This code can only be used after an initial draw'):
890+
leg.get_window_extent()

0 commit comments

Comments
 (0)
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