diff --git a/src/python_spectrometer/_plot_manager.py b/src/python_spectrometer/_plot_manager.py
index 24030f2eb792fc8b7b98f76f676a3f571a48ae6d..97865a8f284a567c557231df697b2d696ef7fe7f 100644
--- a/src/python_spectrometer/_plot_manager.py
+++ b/src/python_spectrometer/_plot_manager.py
@@ -74,10 +74,6 @@ class PlotManager:
 
         self.legend_kw.setdefault('loc', 'upper right')
         self.figure_kw.setdefault('num', f'Spectrometer {len(self.__instances) + 1}')
-        if not any('layout' in key for key in self.figure_kw.keys()):
-            # depending on the matplotlib version, this setting is either
-            # layout='tight' or tight_layout=True
-            self.figure_kw.setdefault('layout', 'tight')
         if self.subplot_kw.pop('sharex', None) is not None:
             warnings.warn('sharex in subplot_kw not negotiable, dropping', UserWarning)
 
@@ -102,7 +98,7 @@ class PlotManager:
         try:
             self._fig = plt.figure(**self.figure_kw)
         except TypeError:
-            if layout := self.figure_kw.pop('layout', False):
+            if layout := self.figure_kw.pop('layout', None) is not None:
                 # matplotlib < 3.5 doesn't support layout kwarg yet
                 self.figure_kw[f'{layout}_layout'] = True
             elif layout is False:
@@ -579,6 +575,13 @@ class PlotManager:
             if self._leg is not None:
                 self._leg.remove()
 
+        if 'layout' not in self.figure_kw:
+            try:
+                self.fig.set_layout_engine('tight')
+                self.fig.get_layout_engine().execute(self.fig)
+            finally:
+                self.fig.set_layout_engine('none')
+
         self.fig.canvas.draw_idle()
         self.fig.canvas.flush_events()