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 af74526

Browse filesBrowse files
committed
Fix Text('').get_window_extent(dpi=...).
This special case does not correctly reset the figure dpi, so the figure randomly gets bigger when it's called. This does not affect Text with actual content.
1 parent f8459a5 commit af74526
Copy full SHA for af74526

File tree

Expand file treeCollapse file tree

2 files changed

+27
-12
lines changed
Filter options
Expand file treeCollapse file tree

2 files changed

+27
-12
lines changed

‎lib/matplotlib/tests/test_text.py

Copy file name to clipboardExpand all lines: lib/matplotlib/tests/test_text.py
+16Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,22 @@ def test_set_position():
321321
assert a + shift_val == b
322322

323323

324+
@pytest.mark.parametrize('text', ['', 'O'], ids=['empty', 'non-empty'])
325+
def test_non_default_dpi(text):
326+
fig, ax = plt.subplots()
327+
328+
t1 = ax.text(0.5, 0.5, text, ha='left', va='bottom')
329+
fig.canvas.draw()
330+
dpi = fig.dpi
331+
332+
bbox1 = t1.get_window_extent()
333+
bbox2 = t1.get_window_extent(dpi=dpi * 10)
334+
np.testing.assert_allclose(bbox2.get_points(), bbox1.get_points() * 10,
335+
rtol=5e-2)
336+
# Text.get_window_extent should not permanently change dpi.
337+
assert fig.dpi == dpi
338+
339+
324340
def test_get_rotation_string():
325341
assert mpl.text.get_rotation('horizontal') == 0.
326342
assert mpl.text.get_rotation('vertical') == 90.

‎lib/matplotlib/text.py

Copy file name to clipboardExpand all lines: lib/matplotlib/text.py
+11-12Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -891,12 +891,12 @@ def get_window_extent(self, renderer=None, dpi=None):
891891
#return _unit_box
892892
if not self.get_visible():
893893
return Bbox.unit()
894-
if dpi is not None:
895-
dpi_orig = self.figure.dpi
896-
self.figure.dpi = dpi
894+
if dpi is None:
895+
dpi = self.figure.dpi
897896
if self.get_text() == '':
898-
tx, ty = self._get_xy_display()
899-
return Bbox.from_bounds(tx, ty, 0, 0)
897+
with cbook._setattr_cm(self.figure, dpi=dpi):
898+
tx, ty = self._get_xy_display()
899+
return Bbox.from_bounds(tx, ty, 0, 0)
900900

901901
if renderer is not None:
902902
self._renderer = renderer
@@ -905,13 +905,12 @@ def get_window_extent(self, renderer=None, dpi=None):
905905
if self._renderer is None:
906906
raise RuntimeError('Cannot get window extent w/o renderer')
907907

908-
bbox, info, descent = self._get_layout(self._renderer)
909-
x, y = self.get_unitless_position()
910-
x, y = self.get_transform().transform((x, y))
911-
bbox = bbox.translated(x, y)
912-
if dpi is not None:
913-
self.figure.dpi = dpi_orig
914-
return bbox
908+
with cbook._setattr_cm(self.figure, dpi=dpi):
909+
bbox, info, descent = self._get_layout(self._renderer)
910+
x, y = self.get_unitless_position()
911+
x, y = self.get_transform().transform((x, y))
912+
bbox = bbox.translated(x, y)
913+
return bbox
915914

916915
def set_backgroundcolor(self, color):
917916
"""

0 commit comments

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