From 8a3ce1daad257955af5bb3b286c6f95d91490021 Mon Sep 17 00:00:00 2001 From: Jody Klymak Date: Thu, 29 Jul 2021 21:41:12 -0700 Subject: [PATCH] FIX: pass dpi from parent to subfigure correctly if dpi changes --- lib/matplotlib/axis.py | 12 +++-- lib/matplotlib/figure.py | 9 +++- .../test_subfigure_scatter_size.png | Bin 0 -> 4605 bytes lib/matplotlib/tests/test_figure.py | 45 ++++++++++++++++++ 4 files changed, 61 insertions(+), 5 deletions(-) create mode 100644 lib/matplotlib/tests/baseline_images/test_figure/test_subfigure_scatter_size.png diff --git a/lib/matplotlib/axis.py b/lib/matplotlib/axis.py index aa63514c61ff..887cf97ef140 100644 --- a/lib/matplotlib/axis.py +++ b/lib/matplotlib/axis.py @@ -2252,8 +2252,10 @@ def set_default_intervals(self): self.stale = True def get_tick_space(self): - ends = self.axes.transAxes.transform([[0, 0], [1, 0]]) - length = ((ends[1][0] - ends[0][0]) / self.axes.figure.dpi) * 72 + ends = mtransforms.Bbox.from_bounds(0, 0, 1, 1) + ends = ends.transformed(self.axes.transAxes - + self.figure.dpi_scale_trans) + length = ends.width * 72 # There is a heuristic here that the aspect ratio of tick text # is no more than 3:1 size = self._get_tick_label_size('x') * 3 @@ -2512,8 +2514,10 @@ def set_default_intervals(self): self.stale = True def get_tick_space(self): - ends = self.axes.transAxes.transform([[0, 0], [0, 1]]) - length = ((ends[1][1] - ends[0][1]) / self.axes.figure.dpi) * 72 + ends = mtransforms.Bbox.from_bounds(0, 0, 1, 1) + ends = ends.transformed(self.axes.transAxes - + self.figure.dpi_scale_trans) + length = ends.height * 72 # Having a spacing of at least 2 just looks good. size = self._get_tick_label_size('y') * 2 if size > 0: diff --git a/lib/matplotlib/figure.py b/lib/matplotlib/figure.py index 404179341264..3a5f11957ed8 100644 --- a/lib/matplotlib/figure.py +++ b/lib/matplotlib/figure.py @@ -1980,7 +1980,6 @@ def __init__(self, parent, subplotspec, *, self.subplotpars = parent.subplotpars self.dpi_scale_trans = parent.dpi_scale_trans self._axobservers = parent._axobservers - self.dpi = parent.dpi self.canvas = parent.canvas self.transFigure = parent.transFigure self.bbox_relative = None @@ -2001,6 +2000,14 @@ def __init__(self, parent, subplotspec, *, if parent._layoutgrid is not None: self.init_layoutgrid() + @property + def dpi(self): + return self._parent.dpi + + @dpi.setter + def dpi(self, value): + self._parent.dpi = value + def _redo_transform_rel_fig(self, bbox=None): """ Make the transSubfigure bbox relative to Figure transform. diff --git a/lib/matplotlib/tests/baseline_images/test_figure/test_subfigure_scatter_size.png b/lib/matplotlib/tests/baseline_images/test_figure/test_subfigure_scatter_size.png new file mode 100644 index 0000000000000000000000000000000000000000..c193b5d0ec223873ef51b84c0d2901e8e22a90a6 GIT binary patch literal 4605 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 bc{ew>G===lzX