From 6dcd7b62c20c4d5c4e9ef3b574907387896adf65 Mon Sep 17 00:00:00 2001 From: Hassan Kibirige Date: Fri, 3 Jul 2026 13:00:40 +0300 Subject: [PATCH] fix(layout): align plot titles across plots in a composition A new alignment pass equalises the space between the title block and the panel (legend, axis title, axis text, ticks, facet strip), so a plot's title no longer drops below its neighbour's when only the neighbour has a facet strip, top legend or top-positioned x axis. --- doc/changelog.qmd | 4 +++ plotnine/_mpl/layout_manager/_layout_tree.py | 20 +++++++++++ .../_mpl/layout_manager/_plot_side_space.py | 32 +++++++++--------- .../test_plot_composition/facets.png | Bin 18305 -> 18337 bytes .../facets_legend_title_align.png | Bin 0 -> 12721 bytes .../facets_title_align.png | Bin 0 -> 12630 bytes tests/test_plot_composition.py | 18 ++++++++++ 7 files changed, 58 insertions(+), 16 deletions(-) create mode 100644 tests/baseline_images/test_plot_composition/facets_legend_title_align.png create mode 100644 tests/baseline_images/test_plot_composition/facets_title_align.png diff --git a/doc/changelog.qmd b/doc/changelog.qmd index 0128da6a4..4b68adaf3 100644 --- a/doc/changelog.qmd +++ b/doc/changelog.qmd @@ -112,6 +112,10 @@ title: Changelog text, so with free scales large margins no longer push the tick labels into the neighbouring panel. +- Plot titles in a composition now sit at the same height even when the + plots differ in what lies between the title and the panel — facet + strips, top legends or a top-positioned x axis. + - Subclass geoms now inherit their parent geom's default parameters, so parameters that a parent geom supports are no longer rejected. [](:class:`~plotnine.geom_step`) accepts `lineend`, `linejoin` and `arrow`, diff --git a/plotnine/_mpl/layout_manager/_layout_tree.py b/plotnine/_mpl/layout_manager/_layout_tree.py index c69d55d0a..af6fbf003 100644 --- a/plotnine/_mpl/layout_manager/_layout_tree.py +++ b/plotnine/_mpl/layout_manager/_layout_tree.py @@ -204,6 +204,7 @@ def arrange_layout(self): side-effects. """ self.align_axis_titles() + self.align_plot_titles() self.align() self.resize() @@ -563,6 +564,25 @@ def axis_title_clearance(s): for tree in self.sub_compositions: tree.align_axis_titles() + def align_plot_titles(self): + """ + Align the plot titles across each row of the composition + + The titles in a row line up when every plot has the same + distance between its title block and its panel. Equalising + the plot_title_clearance inserts the compensating space below + the title block, so a plot matches its neighbours' top + legends, facet strips or top axes without its title moving. + """ + + def plot_title_clearance(s): + return s.plot_title_clearance + + _align(self.top_spaces, plot_title_clearance, "plot_title_alignment") + + for tree in self.sub_compositions: + tree.align_plot_titles() + def resize_widths(self): """ Resize the widths of the plots & panels in the composition diff --git a/plotnine/_mpl/layout_manager/_plot_side_space.py b/plotnine/_mpl/layout_manager/_plot_side_space.py index daeeacb3c..081290251 100644 --- a/plotnine/_mpl/layout_manager/_plot_side_space.py +++ b/plotnine/_mpl/layout_manager/_plot_side_space.py @@ -454,16 +454,6 @@ def _calculate(self): if adjustment > 0: self.plot_margin += adjustment - @property - def axis_title_clearance(self) -> float: - """ - Axis-title-to-panel clearance, excluding any facet strip - """ - # The strip sits outside the axis title's alignment band, so it - # does not count toward the title-to-panel clearance used to - # align axis titles across a composition. - return super().axis_title_clearance - self.strip_text - @property def offset(self): """ @@ -544,6 +534,14 @@ class top_space(_plot_side_space): plot_subtitle_margin_top: float = 0 plot_subtitle: float = 0 plot_subtitle_margin_bottom: float = 0 + plot_title_alignment: float = 0 + """ + Space added to align the plot title with others in a composition + + This value is calculated during the layout process. The amount is + the difference between the largest and smallest plot_title_clearance + among the items in the composition. + """ legend: float = 0 legend_box_spacing: float = 0 axis_title_margin_top: float = 0 @@ -621,14 +619,16 @@ def _calculate(self): self.plot_margin += adjustment @property - def axis_title_clearance(self) -> float: + def plot_title_clearance(self) -> float: """ - Axis-title-to-panel clearance, excluding any facet strip + The distance between the plot title block and the panel + + Everything between the title & subtitle and the panel — legend, + axis title, axis text, ticks and facet strip — counts toward + this distance. When it is equal across the plots in a row of a + composition, their titles sit at the same height. """ - # The strip sits outside the axis title's alignment band, so it - # does not count toward the title-to-panel clearance used to - # align axis titles across a composition. - return super().axis_title_clearance - self.strip_text + return self.total - self.sum_upto("plot_title_alignment") @property def offset(self) -> float: diff --git a/tests/baseline_images/test_plot_composition/facets.png b/tests/baseline_images/test_plot_composition/facets.png index 2eb63976dc1de097d0b8d871ab2ab7ddca91c10f..8ed395b89c15ef9375b9b2ec8e779a4123b00ab2 100644 GIT binary patch literal 18337 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 literal 18305 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

O&a>`2!R2WNX184WV5h+faIVVESzVYVJ@&pK>wJ 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 literal 0 HcmV?d00001 diff --git a/tests/test_plot_composition.py b/tests/test_plot_composition.py index c8fbedacd..6bba407bc 100644 --- a/tests/test_plot_composition.py +++ b/tests/test_plot_composition.py @@ -113,6 +113,24 @@ def test_facets(): assert p == "facets" +def test_facets_title_align(): + # The titles of a faceted plot (strip above the panel) and a plain + # plot should be at the same height. + p1 = plot.purple + g.points + facet_wrap("cat") + p2 = plot.brown + g.points + legend.bottom + p = p1 | p2 + assert p == "facets_title_align" + + +def test_facets_legend_title_align(): + # The titles of a faceted plot (strip above the panel) and a plain + # plot with a legend at the top should be at the same height. + p1 = plot.purple + g.points + facet_wrap("cat") + p2 = plot.brown + g.points + legend.top + p = p1 | p2 + assert p == "facets_legend_title_align" + + def test_complex_composition(): p1 = plot.red p2 = plot.green + g.points + rotate.plot_title + legend.bottom