diff --git a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/abstract_hypercube_visualizer.py b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/abstract_hypercube_visualizer.py
index 72c4479e5d9b32ca0219b5bc56673ced9792a195..4d65c31b328c5b2015eaf903b6d491a296807b4c 100644
--- a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/abstract_hypercube_visualizer.py
+++ b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/abstract_hypercube_visualizer.py
@@ -97,6 +97,7 @@ class AbstractHypercubeVisualizer(object):
             plt.savefig(filepath)
         else:
             plt.show()
+        plt.close()
 
     @property
     def study_visualizer(self) -> StudyVisualizer:
diff --git a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer.py b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer.py
index c4fbbaaf44da1cd573fc61a26a1568663dc95830..872431d2e1e9e1e50bc57647ab4769ef8ee9e440 100644
--- a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer.py
+++ b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer.py
@@ -147,6 +147,15 @@ class AltitudeHypercubeVisualizer(AbstractHypercubeVisualizer):
             axes = [axes]
         return axes
 
+    def load_trend_test_evolution_axes_with_columns(self, nb_rows, nb_columns):
+        fig, axes = plt.subplots(nb_rows, nb_columns, figsize=self.study_visualizer.figsize)
+        if not isinstance(axes, np.ndarray):
+            axes = [axes]
+        else:
+            axes = axes.reshape((nb_rows * nb_columns))
+        return axes
+
+
     def visualize_trend_test_repartition(self, reduction_function, axes=None, subtitle='', isin_parameters=None,
                                          show_or_save_to_file=True, plot_title=None):
         if axes is None:
@@ -205,12 +214,21 @@ class AltitudeHypercubeVisualizer(AbstractHypercubeVisualizer):
         # Take the mean with respect to all the first axis indices
         return df.mean(axis=0)
 
-    def visualize_year_trend_test(self, axes=None, marker='o', add_detailed_plots=False):
+    def visualize_year_trend_test(self, axes=None, marker='o', add_detailed_plots=False, plot_title=None,
+                                  isin_parameters=None,
+                                  show_or_save_to_file=True):
         for subtitle, reduction_function in self.subtitle_to_reduction_function(self.year_reduction,
                                                                                 add_detailed_plot=add_detailed_plots).items():
-            self.visualize_trend_test_evolution(reduction_function=reduction_function, xlabel=STARTING_YEARS_XLABEL,
-                                                xlabel_values=self.starting_years, axes=axes, marker=marker,
-                                                subtitle=subtitle)
+            last_result = self.visualize_trend_test_evolution(reduction_function=reduction_function,
+                                                              xlabel=STARTING_YEARS_XLABEL,
+                                                              xlabel_values=self.starting_years, axes=axes,
+                                                              marker=marker,
+                                                              subtitle=subtitle,
+                                                              isin_parameters=isin_parameters,
+                                                              show_or_save_to_file=show_or_save_to_file,
+                                                              plot_title=plot_title
+                                                              )
+        return last_result
 
     @staticmethod
     def index_reduction(df, level):
diff --git a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer_extended.py b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer_extended.py
index 5e8d220207c30c20b2379d5571125c2b5a4cf572..c0ac2f7f4e4ebcff06df7b156c17a0a49eae57b2 100644
--- a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer_extended.py
+++ b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer_extended.py
@@ -23,10 +23,18 @@ class AltitudeHypercubeVisualizerExtended(AltitudeHypercubeVisualizer):
                 df_bool = res.transpose() if transpose else res
         return df_bool
 
-    def _visualize_meta(self, visualization_function, loading_function, name_to_isin_parameters=None):
+    def _visualize_meta(self, visualization_function, loading_function, name_to_isin_parameters=None,
+                        multiplication_factor_column=None):
         assert name_to_isin_parameters is not None, 'this method should not be called directly'
-        multiplication_factor = len(name_to_isin_parameters)
-        all_axes = loading_function(self.nb_rows * multiplication_factor)
+
+        if multiplication_factor_column is None:
+            multiplication_factor_row = len(name_to_isin_parameters)
+            all_axes = loading_function(self.nb_rows * multiplication_factor_row)
+            multiplication_factor = multiplication_factor_row
+        else:
+            multiplication_factor_row = len(name_to_isin_parameters) // multiplication_factor_column
+            multiplication_factor = multiplication_factor_row * multiplication_factor_column
+            all_axes = loading_function(self.nb_rows * multiplication_factor_row, multiplication_factor_column)
         specific_title = ''
         for j, (name, isin_parameters) in enumerate(name_to_isin_parameters.items()):
             axes = all_axes[j::multiplication_factor]
@@ -77,6 +85,24 @@ class AltitudeHypercubeVisualizerExtended(AltitudeHypercubeVisualizer):
         return {altitude_band_name: [(False, values, self.altitude_index_level)]
                 for altitude_band_name, values in self.altitude_band_name_to_values.items()}
 
+    # Year trends
+
+    @property
+    def massif_name_and_altitude_band_name_to_isin_parameters(self):
+        d = {}
+        for massif_name, isin_parameters1 in self.region_name_to_isin_parameters.items():
+            for altitude_band_name, isin_parameters2 in self.altitude_band_name_to_isin_parameters.items():
+                name = massif_name + ' ' + altitude_band_name
+                isin_parameters = isin_parameters1 + isin_parameters2
+                d[name] = isin_parameters
+        return d
+
+    def vsualize_year_trend_by_regions_and_altitudes(self):
+        return self._visualize_meta(visualization_function=self.visualize_year_trend_test,
+                                    loading_function=self.load_trend_test_evolution_axes_with_columns,
+                                    name_to_isin_parameters=self.massif_name_and_altitude_band_name_to_isin_parameters,
+                                    multiplication_factor_column=len(self.altitude_band_name_to_isin_parameters))
+
 
 
 
diff --git a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_hypercube_visualization.py b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_hypercube_visualization.py
index bc3ba3da48d5750fa1c709ded605e0dfb78bb9f4..90fad7b1ee9bb5663d1343c3b3ffb7b9feb8102b 100644
--- a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_hypercube_visualization.py
+++ b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_hypercube_visualization.py
@@ -99,13 +99,13 @@ def fast_altitude_year_hypercube():
 
 
 def fast_altitude_year_hypercube_extended():
-    save_to_file = False
+    save_to_file = True
     only_first_one = False
     nb_data_reduced_for_speed = True
     altitudes = [ALL_ALTITUDES[3], ALL_ALTITUDES[-7]]
-    for study_class in SCM_STUDIES[:1]:
-        for last_starting_year in [None, 1989, 1999][:1]:
-            for trend_test_class in [GevLocationChangePointTest, GevScaleChangePointTest, GevShapeChangePointTest][:1]:
+    for study_class in SCM_STUDIES[:2]:
+        for last_starting_year in [None, 1989, 1999][:2]:
+            for trend_test_class in [GevLocationChangePointTest, GevScaleChangePointTest, GevShapeChangePointTest][:2]:
                 visualizers = [
                     StudyVisualizer(study, temporal_non_stationarity=True, verbose=False, multiprocessing=True)
                     for study in study_iterator(study_class=study_class, only_first_one=only_first_one,
@@ -116,10 +116,11 @@ def fast_altitude_year_hypercube_extended():
                                                                  nb_data_reduced_for_speed=nb_data_reduced_for_speed,
                                                                  last_starting_year=last_starting_year)
                 # visualizer.visualize_year_trend_test()
+                visualizer.vsualize_year_trend_by_regions_and_altitudes()
                 # visualizer.visualize_altitude_trend_test()
-                visualizer.visualize_massif_trend_test_by_altitudes()
                 # visualizer.visualize_massif_trend_test_by_altitudes()
-                # visualizer.visualize_altitute_trend_test_by_regions()
+                visualizer.visualize_massif_trend_test_by_altitudes()
+                visualizer.visualize_altitute_trend_test_by_regions()
                 # visualizer.visualize_massif_trend_test()
 
 
@@ -153,12 +154,12 @@ def full_altitude_year_hypercube_extended():
     only_first_one = False
     nb_data_reduced_for_speed = False
     altitudes = ALL_ALTITUDES[3:-6]
-    for study_class in SCM_STUDIES[:1]:
+    for study_class in SCM_STUDIES[:]:
         for trend_test_class in [GevLocationChangePointTest, GevScaleChangePointTest,
                                  GevShapeChangePointTest][:1]:
-            years = [1967, 1977, 1987, 1997, 2007, None][-2:][::-1]
+            years = [1967, 1977, 1987, 1997, 2007, None][-4:][::-1]
             for last_starting_year in years:
-                for days in [1, 3]:
+                for days in [1, 3][1:]:
                     visualizers = [
                         StudyVisualizer(study, temporal_non_stationarity=True, verbose=False, multiprocessing=True)
                         for study in study_iterator(study_class=study_class, only_first_one=only_first_one,
@@ -171,6 +172,8 @@ def full_altitude_year_hypercube_extended():
                                                                         last_starting_year=last_starting_year,
                                                                         )
                     visualizer.visualize_altitute_trend_test_by_regions()
+                    visualizer.visualize_massif_trend_test_by_altitudes()
+                    visualizer.vsualize_year_trend_by_regions_and_altitudes()
                     # visualizer.visualize_year_trend_test()
                     # visualizer.visualize_massif_trend_test()
                     # visualizer.visualize_altitude_trend_test()
@@ -200,8 +203,9 @@ def main_run():
     # fast_altitude_hypercube()
     # fast_altitude_year_hypercube()
 
-    fast_altitude_year_hypercube_extended()
-    # full_altitude_year_hypercube_extended()
+    # fast_altitude_year_hypercube_extended()
+    full_altitude_year_hypercube_extended()
+
     # full_altitude_year_hypercube()
     # fast_quantity_altitude_hypercube()
     # full_quantity_altitude_hypercube()