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 0c911b3

Browse filesBrowse files
rcomertacaswell
andcommitted
Get dpi, canvas and renderer directly from the root Figure
Co-authored-by: Thomas A Caswell <tcaswell@gmail.com>
1 parent 9253f3d commit 0c911b3
Copy full SHA for 0c911b3

File tree

Expand file treeCollapse file tree

23 files changed

+87
-86
lines changed
Filter options
Expand file treeCollapse file tree

23 files changed

+87
-86
lines changed

‎lib/matplotlib/artist.py

Copy file name to clipboardExpand all lines: lib/matplotlib/artist.py
+2-2Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -474,7 +474,7 @@ def _different_canvas(self, event):
474474
# subclass-specific implementation follows
475475
"""
476476
return (getattr(event, "canvas", None) is not None
477-
and (fig := self.get_figure(root=False)) is not None
477+
and (fig := self.get_figure(root=True)) is not None
478478
and event.canvas is not fig.canvas)
479479

480480
def contains(self, mouseevent):
@@ -527,7 +527,7 @@ def pick(self, mouseevent):
527527
else:
528528
inside, prop = self.contains(mouseevent)
529529
if inside:
530-
PickEvent("pick_event", self.get_figure(root=False).canvas,
530+
PickEvent("pick_event", self.get_figure(root=True).canvas,
531531
mouseevent, self, **prop)._process()
532532

533533
# Pick children

‎lib/matplotlib/axes/_base.py

Copy file name to clipboardExpand all lines: lib/matplotlib/axes/_base.py
+4-4Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3113,7 +3113,7 @@ def draw(self, renderer):
31133113
for _axis in self._axis_map.values():
31143114
artists.remove(_axis)
31153115

3116-
if not self.get_figure(root=False).canvas.is_saving():
3116+
if not self.get_figure(root=True).canvas.is_saving():
31173117
artists = [
31183118
a for a in artists
31193119
if not a.get_animated() or isinstance(a, mimage.AxesImage)]
@@ -3153,7 +3153,7 @@ def draw_artist(self, a):
31533153
"""
31543154
Efficiently redraw a single artist.
31553155
"""
3156-
a.draw(self.get_figure(root=False).canvas.get_renderer())
3156+
a.draw(self.get_figure(root=True).canvas.get_renderer())
31573157

31583158
def redraw_in_frame(self):
31593159
"""
@@ -3163,7 +3163,7 @@ def redraw_in_frame(self):
31633163
for artist in [*self._axis_map.values(),
31643164
self.title, self._left_title, self._right_title]:
31653165
stack.enter_context(artist._cm_set(visible=False))
3166-
self.draw(self.get_figure(root=False).canvas.get_renderer())
3166+
self.draw(self.get_figure(root=True).canvas.get_renderer())
31673167

31683168
# Axes rectangle characteristics
31693169

@@ -4471,7 +4471,7 @@ def get_tightbbox(self, renderer=None, call_axes_locator=True,
44714471

44724472
bb = []
44734473
if renderer is None:
4474-
renderer = self.get_figure(root=False)._get_renderer()
4474+
renderer = self.get_figure(root=True)._get_renderer()
44754475

44764476
if not self.get_visible():
44774477
return None

‎lib/matplotlib/axis.py

Copy file name to clipboardExpand all lines: lib/matplotlib/axis.py
+9-9Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1347,7 +1347,7 @@ def _update_ticks(self):
13471347
def _get_ticklabel_bboxes(self, ticks, renderer=None):
13481348
"""Return lists of bboxes for ticks' label1's and label2's."""
13491349
if renderer is None:
1350-
renderer = self.get_figure(root=False)._get_renderer()
1350+
renderer = self.get_figure(root=True)._get_renderer()
13511351
return ([tick.label1.get_window_extent(renderer)
13521352
for tick in ticks if tick.label1.get_visible()],
13531353
[tick.label2.get_window_extent(renderer)
@@ -1366,7 +1366,7 @@ def get_tightbbox(self, renderer=None, *, for_layout_only=False):
13661366
if not self.get_visible():
13671367
return
13681368
if renderer is None:
1369-
renderer = self.get_figure(root=False)._get_renderer()
1369+
renderer = self.get_figure(root=True)._get_renderer()
13701370
ticks_to_draw = self._update_ticks()
13711371

13721372
self._update_label_position(renderer)
@@ -2410,13 +2410,13 @@ def _update_label_position(self, renderer):
24102410
bbox = mtransforms.Bbox.union([
24112411
*bboxes, self.axes.spines.get("bottom", self.axes).get_window_extent()])
24122412
self.label.set_position(
2413-
(x, bbox.y0 - self.labelpad * self.get_figure(root=False).dpi / 72))
2413+
(x, bbox.y0 - self.labelpad * self.get_figure(root=True).dpi / 72))
24142414
else:
24152415
# Union with extents of the top spine if present, of the axes otherwise.
24162416
bbox = mtransforms.Bbox.union([
24172417
*bboxes2, self.axes.spines.get("top", self.axes).get_window_extent()])
24182418
self.label.set_position(
2419-
(x, bbox.y1 + self.labelpad * self.get_figure(root=False).dpi / 72))
2419+
(x, bbox.y1 + self.labelpad * self.get_figure(root=True).dpi / 72))
24202420

24212421
def _update_offset_text_position(self, bboxes, bboxes2):
24222422
"""
@@ -2432,14 +2432,14 @@ def _update_offset_text_position(self, bboxes, bboxes2):
24322432
else:
24332433
bbox = mtransforms.Bbox.union(bboxes)
24342434
bottom = bbox.y0
2435-
y = bottom - self.OFFSETTEXTPAD * self.get_figure(root=False).dpi / 72
2435+
y = bottom - self.OFFSETTEXTPAD * self.get_figure(root=True).dpi / 72
24362436
else:
24372437
if not len(bboxes2):
24382438
top = self.axes.bbox.ymax
24392439
else:
24402440
bbox = mtransforms.Bbox.union(bboxes2)
24412441
top = bbox.y1
2442-
y = top + self.OFFSETTEXTPAD * self.get_figure(root=False).dpi / 72
2442+
y = top + self.OFFSETTEXTPAD * self.get_figure(root=True).dpi / 72
24432443
self.offsetText.set_position((x, y))
24442444

24452445
def set_ticks_position(self, position):
@@ -2637,13 +2637,13 @@ def _update_label_position(self, renderer):
26372637
bbox = mtransforms.Bbox.union([
26382638
*bboxes, self.axes.spines.get("left", self.axes).get_window_extent()])
26392639
self.label.set_position(
2640-
(bbox.x0 - self.labelpad * self.get_figure(root=False).dpi / 72, y))
2640+
(bbox.x0 - self.labelpad * self.get_figure(root=True).dpi / 72, y))
26412641
else:
26422642
# Union with extents of the right spine if present, of the axes otherwise.
26432643
bbox = mtransforms.Bbox.union([
26442644
*bboxes2, self.axes.spines.get("right", self.axes).get_window_extent()])
26452645
self.label.set_position(
2646-
(bbox.x1 + self.labelpad * self.get_figure(root=False).dpi / 72, y))
2646+
(bbox.x1 + self.labelpad * self.get_figure(root=True).dpi / 72, y))
26472647

26482648
def _update_offset_text_position(self, bboxes, bboxes2):
26492649
"""
@@ -2658,7 +2658,7 @@ def _update_offset_text_position(self, bboxes, bboxes2):
26582658
bbox = self.axes.bbox
26592659
top = bbox.ymax
26602660
self.offsetText.set_position(
2661-
(x, top + self.OFFSETTEXTPAD * self.get_figure(root=False).dpi / 72)
2661+
(x, top + self.OFFSETTEXTPAD * self.get_figure(root=True).dpi / 72)
26622662
)
26632663

26642664
def set_offset_position(self, position):

‎lib/matplotlib/backend_bases.py

Copy file name to clipboardExpand all lines: lib/matplotlib/backend_bases.py
+5-5Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1514,7 +1514,7 @@ def _mouse_handler(event):
15141514
# done with the internal _set_inaxes method which ensures that
15151515
# the xdata and ydata attributes are also correct.
15161516
try:
1517-
canvas = last_axes.get_figure(root=False).canvas
1517+
canvas = last_axes.get_figure(root=True).canvas
15181518
leave_event = LocationEvent(
15191519
"axes_leave_event", canvas,
15201520
event.x, event.y, event.guiEvent,
@@ -2496,27 +2496,27 @@ def _get_uniform_gridstate(ticks):
24962496
scale = ax.get_yscale()
24972497
if scale == 'log':
24982498
ax.set_yscale('linear')
2499-
ax.get_figure(root=False).canvas.draw_idle()
2499+
ax.get_figure(root=True).canvas.draw_idle()
25002500
elif scale == 'linear':
25012501
try:
25022502
ax.set_yscale('log')
25032503
except ValueError as exc:
25042504
_log.warning(str(exc))
25052505
ax.set_yscale('linear')
2506-
ax.get_figure(root=False).canvas.draw_idle()
2506+
ax.get_figure(root=True).canvas.draw_idle()
25072507
# toggle scaling of x-axes between 'log and 'linear' (default key 'k')
25082508
elif event.key in rcParams['keymap.xscale']:
25092509
scalex = ax.get_xscale()
25102510
if scalex == 'log':
25112511
ax.set_xscale('linear')
2512-
ax.get_figure(root=False).canvas.draw_idle()
2512+
ax.get_figure(root=True).canvas.draw_idle()
25132513
elif scalex == 'linear':
25142514
try:
25152515
ax.set_xscale('log')
25162516
except ValueError as exc:
25172517
_log.warning(str(exc))
25182518
ax.set_xscale('linear')
2519-
ax.get_figure(root=False).canvas.draw_idle()
2519+
ax.get_figure(root=True).canvas.draw_idle()
25202520

25212521

25222522
def button_press_handler(event, canvas=None, toolbar=None):

‎lib/matplotlib/collections.py

Copy file name to clipboardExpand all lines: lib/matplotlib/collections.py
+2-2Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1001,7 +1001,7 @@ def set_sizes(self, sizes, dpi=72.0):
10011001

10021002
@artist.allow_rasterization
10031003
def draw(self, renderer):
1004-
self.set_sizes(self._sizes, self.get_figure(root=False).dpi)
1004+
self.set_sizes(self._sizes, self.get_figure(root=True).dpi)
10051005
super().draw(renderer)
10061006

10071007

@@ -1310,7 +1310,7 @@ def get_rotation(self):
13101310

13111311
@artist.allow_rasterization
13121312
def draw(self, renderer):
1313-
self.set_sizes(self._sizes, self.get_figure(root=False).dpi)
1313+
self.set_sizes(self._sizes, self.get_figure(root=True).dpi)
13141314
self._transforms = [
13151315
transforms.Affine2D(x).rotate(-self._rotation).get_matrix()
13161316
for x in self._transforms

‎lib/matplotlib/contour.py

Copy file name to clipboardExpand all lines: lib/matplotlib/contour.py
+2-2Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828

2929
def _contour_labeler_event_handler(cs, inline, inline_spacing, event):
30-
canvas = cs.axes.get_figure(root=False).canvas
30+
canvas = cs.axes.get_figure(root=True).canvas
3131
is_button = event.name == "button_press_event"
3232
is_key = event.name == "key_press_event"
3333
# Quit (even if not in infinite mode; this is consistent with
@@ -224,7 +224,7 @@ def too_close(self, x, y, lw):
224224
def _get_nth_label_width(self, nth):
225225
"""Return the width of the *nth* label, in pixels."""
226226
fig = self.axes.get_figure(root=False)
227-
renderer = fig._get_renderer()
227+
renderer = fig.get_figure(root=True)._get_renderer()
228228
return (Text(0, 0,
229229
self.get_text(self.labelLevelList[nth], self.labelFmt),
230230
figure=fig, fontproperties=self._label_font_props)

‎lib/matplotlib/figure.py

Copy file name to clipboardExpand all lines: lib/matplotlib/figure.py
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -947,7 +947,7 @@ def _remove_axes(self, ax, owners):
947947

948948
self._axobservers.process("_axes_change_event", self)
949949
self.stale = True
950-
self.canvas.release_mouse(ax)
950+
self._root_figure.canvas.release_mouse(ax)
951951

952952
for name in ax._axis_names: # Break link between any shared Axes
953953
grouper = ax._shared_axes[name]

‎lib/matplotlib/legend.py

Copy file name to clipboardExpand all lines: lib/matplotlib/legend.py
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1065,7 +1065,7 @@ def get_title(self):
10651065
def get_window_extent(self, renderer=None):
10661066
# docstring inherited
10671067
if renderer is None:
1068-
renderer = self.get_figure(root=False)._get_renderer()
1068+
renderer = self.get_figure(root=True)._get_renderer()
10691069
return self._legend_box.get_window_extent(renderer=renderer)
10701070

10711071
def get_tightbbox(self, renderer=None):

‎lib/matplotlib/lines.py

Copy file name to clipboardExpand all lines: lib/matplotlib/lines.py
+3-3Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ def contains(self, mouseevent):
467467
yt = xy[:, 1]
468468

469469
# Convert pick radius from points to pixels
470-
fig = self.get_figure(root=False)
470+
fig = self.get_figure(root=True)
471471
if fig is None:
472472
_log.warning('no figure set when check if mouse is on line')
473473
pixels = self._pickradius
@@ -641,7 +641,7 @@ def get_window_extent(self, renderer=None):
641641
ignore=True)
642642
# correct for marker size, if any
643643
if self._marker:
644-
ms = (self._markersize / 72.0 * self.get_figure(root=False).dpi) * 0.5
644+
ms = (self._markersize / 72.0 * self.get_figure(root=True).dpi) * 0.5
645645
bbox = bbox.padded(ms)
646646
return bbox
647647

@@ -1649,7 +1649,7 @@ def __init__(self, line):
16491649
'pick_event', self.onpick)
16501650
self.ind = set()
16511651

1652-
canvas = property(lambda self: self.axes.get_figure(root=False).canvas)
1652+
canvas = property(lambda self: self.axes.get_figure(root=True).canvas)
16531653

16541654
def process_selected(self, ind, xs, ys):
16551655
"""

‎lib/matplotlib/offsetbox.py

Copy file name to clipboardExpand all lines: lib/matplotlib/offsetbox.py
+7-7Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ def get_bbox(self, renderer):
363363
def get_window_extent(self, renderer=None):
364364
# docstring inherited
365365
if renderer is None:
366-
renderer = self.get_figure(root=False)._get_renderer()
366+
renderer = self.get_figure(root=True)._get_renderer()
367367
bbox = self.get_bbox(renderer)
368368
try: # Some subclasses redefine get_offset to take no args.
369369
px, py = self.get_offset(bbox, renderer)
@@ -1356,15 +1356,15 @@ def get_fontsize(self):
13561356
def get_window_extent(self, renderer=None):
13571357
# docstring inherited
13581358
if renderer is None:
1359-
renderer = self.get_figure(root=False)._get_renderer()
1359+
renderer = self.get_figure(root=True)._get_renderer()
13601360
self.update_positions(renderer)
13611361
return Bbox.union([child.get_window_extent(renderer)
13621362
for child in self.get_children()])
13631363

13641364
def get_tightbbox(self, renderer=None):
13651365
# docstring inherited
13661366
if renderer is None:
1367-
renderer = self.get_figure(root=False)._get_renderer()
1367+
renderer = self.get_figure(root=True)._get_renderer()
13681368
self.update_positions(renderer)
13691369
return Bbox.union([child.get_tightbbox(renderer)
13701370
for child in self.get_children()])
@@ -1469,7 +1469,7 @@ def __init__(self, ref_artist, use_blit=False):
14691469
]
14701470

14711471
# A property, not an attribute, to maintain picklability.
1472-
canvas = property(lambda self: self.ref_artist.get_figure(root=False).canvas)
1472+
canvas = property(lambda self: self.ref_artist.get_figure(root=True).canvas)
14731473
cids = property(lambda self: [
14741474
disconnect.args[0] for disconnect in self._disconnectors[:2]])
14751475

@@ -1481,7 +1481,7 @@ def on_motion(self, evt):
14811481
if self._use_blit:
14821482
self.canvas.restore_region(self.background)
14831483
self.ref_artist.draw(
1484-
self.ref_artist.get_figure(root=False)._get_renderer())
1484+
self.ref_artist.get_figure(root=True)._get_renderer())
14851485
self.canvas.blit()
14861486
else:
14871487
self.canvas.draw()
@@ -1536,7 +1536,7 @@ def __init__(self, ref_artist, offsetbox, use_blit=False):
15361536

15371537
def save_offset(self):
15381538
offsetbox = self.offsetbox
1539-
renderer = offsetbox.get_figure(root=False)._get_renderer()
1539+
renderer = offsetbox.get_figure(root=True)._get_renderer()
15401540
offset = offsetbox.get_offset(offsetbox.get_bbox(renderer), renderer)
15411541
self.offsetbox_x, self.offsetbox_y = offset
15421542
self.offsetbox.set_offset(offset)
@@ -1547,7 +1547,7 @@ def update_offset(self, dx, dy):
15471547

15481548
def get_loc_in_canvas(self):
15491549
offsetbox = self.offsetbox
1550-
renderer = offsetbox.get_figure(root=False)._get_renderer()
1550+
renderer = offsetbox.get_figure(root=True)._get_renderer()
15511551
bbox = offsetbox.get_bbox(renderer)
15521552
ox, oy = offsetbox._offset
15531553
loc_in_canvas = (ox + bbox.x0, oy + bbox.y0)

‎lib/matplotlib/patches.py

Copy file name to clipboardExpand all lines: lib/matplotlib/patches.py
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4596,7 +4596,7 @@ def _get_xy(self, xy, s, axes=None):
45964596
return self._get_xy(self.xy, 'data')
45974597
return (
45984598
self._get_xy(self.xy, self.xycoords) # converted data point
4599-
+ xy * self.get_figure(root=False).dpi / 72) # converted offset
4599+
+ xy * self.get_figure(root=True).dpi / 72) # converted offset
46004600
elif s == 'polar':
46014601
theta, r = x, y
46024602
x = r * np.cos(theta)

‎lib/matplotlib/pyplot.py

Copy file name to clipboardExpand all lines: lib/matplotlib/pyplot.py
+7-6Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -989,15 +989,16 @@ def figure(
989989

990990
if isinstance(num, FigureBase):
991991
# type narrowed to `Figure | SubFigure` by combination of input and isinstance
992-
if num.canvas.manager is None:
992+
root_fig = num.get_figure(root=True)
993+
if root_fig.canvas.manager is None:
993994
raise ValueError("The passed figure is not managed by pyplot")
994995
elif any([figsize, dpi, facecolor, edgecolor, not frameon,
995-
kwargs]) and num.canvas.manager.num in allnums:
996+
kwargs]) and root_fig.canvas.manager.num in allnums:
996997
_api.warn_external(
997-
"Ignoring specified arguments in this call "
998-
f"because figure with num: {num.canvas.manager.num} already exists")
999-
_pylab_helpers.Gcf.set_active(num.canvas.manager)
1000-
return num.get_figure(root=True)
998+
"Ignoring specified arguments in this call because figure "
999+
f"with num: {root_fig.canvas.manager.num} already exists")
1000+
_pylab_helpers.Gcf.set_active(root_fig.canvas.manager)
1001+
return root_fig
10011002

10021003
next_num = max(allnums) + 1 if allnums else 1
10031004
fig_label = ''

‎lib/matplotlib/quiver.py

Copy file name to clipboardExpand all lines: lib/matplotlib/quiver.py
+6-6Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -316,11 +316,11 @@ def __init__(self, Q, X, Y, U, label,
316316

317317
@property
318318
def labelsep(self):
319-
return self._labelsep_inches * self.Q.axes.get_figure(root=False).dpi
319+
return self._labelsep_inches * self.Q.axes.get_figure(root=True).dpi
320320

321321
def _init(self):
322322
if True: # self._dpi_at_last_init != self.axes.get_figure().dpi
323-
if self.Q._dpi_at_last_init != self.Q.axes.get_figure(root=False).dpi:
323+
if self.Q._dpi_at_last_init != self.Q.axes.get_figure(root=True).dpi:
324324
self.Q._init()
325325
self._set_transform()
326326
with cbook._setattr_cm(self.Q, pivot=self.pivot[self.labelpos],
@@ -341,7 +341,7 @@ def _init(self):
341341
self.vector.set_color(self.color)
342342
self.vector.set_transform(self.Q.get_transform())
343343
self.vector.set_figure(self.get_figure())
344-
self._dpi_at_last_init = self.Q.axes.get_figure(root=False).dpi
344+
self._dpi_at_last_init = self.Q.axes.get_figure(root=True).dpi
345345

346346
def _text_shift(self):
347347
return {
@@ -519,11 +519,11 @@ def _init(self):
519519
self.width = 0.06 * self.span / sn
520520

521521
# _make_verts sets self.scale if not already specified
522-
if (self._dpi_at_last_init != self.axes.get_figure(root=False).dpi
522+
if (self._dpi_at_last_init != self.axes.get_figure(root=True).dpi
523523
and self.scale is None):
524524
self._make_verts(self.XY, self.U, self.V, self.angles)
525525

526-
self._dpi_at_last_init = self.axes.get_figure(root=False).dpi
526+
self._dpi_at_last_init = self.axes.get_figure(root=True).dpi
527527

528528
def get_datalim(self, transData):
529529
trans = self.get_transform()
@@ -580,7 +580,7 @@ def _dots_per_unit(self, units):
580580
'width': bb.width,
581581
'height': bb.height,
582582
'dots': 1.,
583-
'inches': self.axes.get_figure(root=False).dpi,
583+
'inches': self.axes.get_figure(root=True).dpi,
584584
}, units=units)
585585

586586
def _set_transform(self):

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.