Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions ultraplot/figure.py
Original file line number Diff line number Diff line change
Expand Up @@ -898,6 +898,18 @@ def draw(self, renderer):
self._apply_share_label_groups()
super().draw(renderer)

@override
def draw_without_rendering(self):
"""
Draw without output while preserving figure dpi state.
"""
dpi = self.dpi
try:
return super().draw_without_rendering()
finally:
if self.dpi != dpi:
mfigure.Figure.set_dpi(self, dpi)

def _is_auto_share_mode(self, which: str) -> bool:
"""Return whether a given axis uses auto-share mode."""
if which not in ("x", "y"):
Expand Down
15 changes: 15 additions & 0 deletions ultraplot/tests/test_figure.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,21 @@ def test_get_renderer_basic():
assert hasattr(renderer, "draw_path")


def test_draw_without_rendering_preserves_dpi():
"""
draw_without_rendering should not mutate figure dpi/bbox.
"""
fig, ax = uplt.subplots(figsize=(4, 3), dpi=101)
dpi_before = fig.dpi
bbox_before = np.array([fig.bbox.width, fig.bbox.height])

fig.draw_without_rendering()

assert np.isclose(fig.dpi, dpi_before)
assert np.allclose([fig.bbox.width, fig.bbox.height], bbox_before)
uplt.close(fig)


def test_figure_sharing_toggle():
"""
Check if axis sharing and unsharing works
Expand Down